auto value = boost::lexical_cast<double>(_parameters.at(1));\r
int duration = _parameters.size() > 2 ? boost::lexical_cast<int>(_parameters[2]) : 0;\r
std::wstring tween = _parameters.size() > 3 ? _parameters[3] : L"linear";\r
- auto transform = stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
+ transforms.push_back(stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
{\r
transform.brightness = value;\r
return transform;\r
- }, duration, tween);\r
+ }, duration, tween));\r
}\r
else if(_parameters[0] == L"SATURATION")\r
{\r
auto value = boost::lexical_cast<double>(_parameters.at(1));\r
int duration = _parameters.size() > 2 ? boost::lexical_cast<int>(_parameters[2]) : 0;\r
std::wstring tween = _parameters.size() > 3 ? _parameters[3] : L"linear";\r
- auto transform = stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
+ transforms.push_back(stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
{\r
transform.saturation = value;\r
return transform;\r
- }, duration, tween); \r
+ }, duration, tween)); \r
}\r
else if(_parameters[0] == L"CONTRAST")\r
{\r
auto value = boost::lexical_cast<double>(_parameters.at(1));\r
int duration = _parameters.size() > 2 ? boost::lexical_cast<int>(_parameters[2]) : 0;\r
std::wstring tween = _parameters.size() > 3 ? _parameters[3] : L"linear";\r
- auto transform = stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
+ transforms.push_back(stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
{\r
transform.contrast = value;\r
return transform;\r
- }, duration, tween); \r
+ }, duration, tween)); \r
}\r
else if(_parameters[0] == L"LEVELS")\r
{\r
int duration = _parameters.size() > 6 ? boost::lexical_cast<int>(_parameters[6]) : 0;\r
std::wstring tween = _parameters.size() > 7 ? _parameters[7] : L"linear";\r
\r
- auto transform = stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
+ transforms.push_back(stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
{\r
transform.levels = value;\r
return transform;\r
- }, duration, tween);\r
+ }, duration, tween));\r
}\r
else if(_parameters[0] == L"VOLUME")\r
{\r
std::wstring tween = _parameters.size() > 3 ? _parameters[3] : L"linear";\r
double value = boost::lexical_cast<double>(_parameters[1]);\r
\r
- auto transform = stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
+ transforms.push_back(stage::transform_tuple_t(GetLayerIndex(), [=](frame_transform transform) -> frame_transform\r
{\r
transform.volume = value;\r
return transform;\r
- }, duration, tween);\r
+ }, duration, tween));\r
}\r
else if(_parameters[0] == L"CLEAR")\r
{\r
\r
SocketInfoPtr pClientSocket(new SocketInfo(clientSocket, this));\r
\r
+ try\r
+ { // !!!!!!!!!!!!\r
+ if(socketInfoCollection_.Size() >= 50) \r
+ {\r
+ HANDLE handle = nullptr;\r
+ {\r
+ tbb::mutex::scoped_lock lock(socketInfoCollection_.mutex_); \r
+ handle = *(socketInfoCollection_.waitEvents_.begin()+0);\r
+ if(handle == pListenSocketInfo_->event_)\r
+ handle = *(socketInfoCollection_.waitEvents_.begin()+1);\r
+ }\r
+ socketInfoCollection_.RemoveSocketInfo(handle);\r
+ CASPAR_LOG(error) << " Too many connections. Removed last used connection.";\r
+ }\r
+ }catch(...){}\r
+\r
//Determine if we can handle one more client\r
if(socketInfoCollection_.Size() >= CASPAR_MAXIMUM_SOCKET_CLIENTS) {\r
CASPAR_LOG(error) << "Could not accept ) << too many connections).";\r
\r
socketInfoCollection_.AddSocketInfo(pClientSocket);\r
\r
- CASPAR_LOG(info) << "Accepted connection from " << pClientSocket->host_.c_str();\r
+ CASPAR_LOG(info) << "Accepted connection from " << pClientSocket->host_.c_str() << " " << socketInfoCollection_.Size();\r
\r
return true;\r
}\r
// COMMENT: Called then something arrives on the socket that has to be read\r
bool AsyncEventServer::OnRead(SocketInfoPtr& pSI) {\r
int recvResult = SOCKET_ERROR;\r
+ \r
+ try\r
+ { // !!!!!!!!!!!!\r
+ if(pSI)\r
+ {\r
+ tbb::mutex::scoped_lock lock(socketInfoCollection_.mutex_);\r
+ auto it = std::find(socketInfoCollection_.waitEvents_.begin(), socketInfoCollection_.waitEvents_.end(), pSI->event_);\r
+ if(it != socketInfoCollection_.waitEvents_.end())\r
+ {\r
+ auto handle = *it;\r
+ socketInfoCollection_.waitEvents_.erase(it);\r
+ socketInfoCollection_.waitEvents_.push_back(handle);\r
+ }\r
+ }\r
+ }catch(...){}\r
\r
int maxRecvLength = sizeof(pSI->recvBuffer_)-pSI->recvLeftoverOffset_;\r
recvResult = recv(pSI->socket_, pSI->recvBuffer_+pSI->recvLeftoverOffset_, maxRecvLength, 0);\r
maxRecvLength = sizeof(pSI->recvBuffer_)-pSI->recvLeftoverOffset_;\r
recvResult = recv(pSI->socket_, pSI->recvBuffer_+pSI->recvLeftoverOffset_, maxRecvLength, 0);\r
}\r
-\r
+ \r
if(recvResult == SOCKET_ERROR) {\r
int errorCode = WSAGetLastError();\r
if(errorCode == WSAEWOULDBLOCK)\r
// AsyncEventServer::OnWrite\r
// PARAMS: ...\r
// COMMENT: Called when the socket is ready to send more data\r
-void AsyncEventServer::OnWrite(SocketInfoPtr& pSI) {\r
+void AsyncEventServer::OnWrite(SocketInfoPtr& pSI) { \r
DoSend(*pSI); \r
}\r
\r