]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@2544...
authorZebiolo <Zebiolo@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 7 Mar 2012 22:31:07 +0000 (22:31 +0000)
committerZebiolo <Zebiolo@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 7 Mar 2012 22:31:07 +0000 (22:31 +0000)
common/log/log.cpp
protocol/amcp/AMCPCommandsImpl.cpp
protocol/util/AsyncEventServer.cpp
protocol/util/AsyncEventServer.h

index 9dd218384ac5ac22254bbfb5d08c974a92fb0a5b..e067d6ef744c8e3d7d6e00855c3fe23553844182 100644 (file)
@@ -96,7 +96,7 @@ void my_formatter(std::wostream& strm, boost::log::basic_record<wchar_t> const&
                        strm << L" ";\r
        }\r
 \r
-    strm << rec.message();\r
+    strm << replace_nonprintable_copy(rec.message(), L'?');\r
 }\r
 \r
 namespace internal{\r
index 700533e6fd0c5f4269bae10bd24e8716d92d7583..48ff1bfef6b3e2708d67b4d3a6ef1b932474216d 100644 (file)
@@ -433,33 +433,33 @@ bool MixerCommand::DoExecute()
                        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
@@ -472,11 +472,11 @@ bool MixerCommand::DoExecute()
                        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
@@ -484,11 +484,11 @@ bool MixerCommand::DoExecute()
                        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
index 3d068056680d1bdde70a7eddb04e6e6443e5104a..558b4725bd4e52e6f5496366d0e03b478eec4350 100644 (file)
@@ -254,6 +254,22 @@ bool AsyncEventServer::OnAccept(SocketInfoPtr& pSI) {
 \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
@@ -271,7 +287,7 @@ bool AsyncEventServer::OnAccept(SocketInfoPtr& pSI) {
 \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
@@ -342,6 +358,21 @@ bool ConvertMultiByteToWideChar(UINT codePage, char* pSource, int sourceLength,
 // 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
@@ -362,7 +393,7 @@ bool AsyncEventServer::OnRead(SocketInfoPtr& pSI) {
                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
@@ -380,7 +411,7 @@ bool AsyncEventServer::OnRead(SocketInfoPtr& pSI) {
 // 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
index b10ed430acd521a6ec7e386ae0f01ff1f70374ee..27ee8d6d86e588afaaad7daa52c31b3bc7be7f5e 100644 (file)
@@ -125,12 +125,12 @@ private:
                void Clear();\r
 \r
                ClientDisconnectEvent onSocketInfoRemoved;\r
-\r
+               \r
+               HandleVector waitEvents_;\r
+               tbb::mutex mutex_;\r
        private:\r
                SocketInfoMap socketInfoMap_;\r
-               HandleVector waitEvents_;\r
                bool bDirty_;\r
-               tbb::mutex mutex_;\r
        };\r
        SocketInfoCollection socketInfoCollection_;\r
        tbb::mutex mutex_;\r