]> git.sesse.net Git - casparcg/commitdiff
Reduced use of temporaries and minor optimizations in AMCPProtocolStrategy::Parse...
authorniklaspandersson <niklas.p.andersson@svt.se>
Fri, 19 Apr 2013 10:49:58 +0000 (12:49 +0200)
committerniklaspandersson <niklas.p.andersson@svt.se>
Fri, 19 Apr 2013 10:49:58 +0000 (12:49 +0200)
also increased buffersize in SocketInfo to be more efficient

protocol/amcp/AMCPProtocolStrategy.cpp
protocol/util/SocketInfo.h

index ae39ace463af317e6f7cbef0c19b5831be34b557..29e6b5c81676f0f734e64c617ecca5855fc511b6 100644 (file)
@@ -86,14 +86,18 @@ AMCPProtocolStrategy::~AMCPProtocolStrategy() {
 void AMCPProtocolStrategy::Parse(const TCHAR* pData, int charCount, ClientInfoPtr pClientInfo)\r
 {\r
        size_t pos;\r
-       std::wstring recvData(pData, charCount);\r
-       std::wstring availibleData = (pClientInfo != nullptr ? pClientInfo->currentMessage_ : L"") + recvData;\r
+       size_t oldLength = pClientInfo->currentMessage_.length();\r
+\r
+       if(pClientInfo->currentMessage_.capacity() < (oldLength + charCount))\r
+               pClientInfo->currentMessage_.reserve(8192 * 4);\r
+\r
+       pClientInfo->currentMessage_.append(pData, charCount);\r
 \r
        while(true) {\r
-               pos = availibleData.find(MessageDelimiter);\r
+               pos = pClientInfo->currentMessage_.find(MessageDelimiter, (oldLength>(MessageDelimiter.size()-1)) ? oldLength-(MessageDelimiter.size()-1) : 0);\r
                if(pos != std::wstring::npos)\r
                {\r
-                       std::wstring message = availibleData.substr(0,pos);\r
+                       std::wstring message = pClientInfo->currentMessage_.substr(0,pos);\r
 \r
                        //This is where a complete message gets taken care of\r
                        if(message.length() > 0) {\r
@@ -101,10 +105,10 @@ void AMCPProtocolStrategy::Parse(const TCHAR* pData, int charCount, ClientInfoPt
                        }\r
 \r
                        std::size_t nextStartPos = pos + MessageDelimiter.length();\r
-                       if(nextStartPos < availibleData.length())\r
-                               availibleData = availibleData.substr(nextStartPos);\r
+                       if(nextStartPos < pClientInfo->currentMessage_.length())\r
+                               pClientInfo->currentMessage_ = pClientInfo->currentMessage_.substr(nextStartPos);\r
                        else {\r
-                               availibleData.clear();\r
+                               pClientInfo->currentMessage_.clear();\r
                                break;\r
                        }\r
                }\r
@@ -113,13 +117,14 @@ void AMCPProtocolStrategy::Parse(const TCHAR* pData, int charCount, ClientInfoPt
                        break;\r
                }\r
        }\r
-       if(pClientInfo)\r
-               pClientInfo->currentMessage_ = availibleData;\r
 }\r
 \r
 void AMCPProtocolStrategy::ProcessMessage(const std::wstring& message, ClientInfoPtr& pClientInfo)\r
 {      \r
-       CASPAR_LOG(info) << L"Received message from " << pClientInfo->print() << ": " << message << L"\\r\\n";\r
+       if(message.length() < 512)\r
+               CASPAR_LOG(info) << L"Received message from " << pClientInfo->print() << ": " << message << L"\\r\\n";\r
+       else\r
+               CASPAR_LOG(info) << L"Received long message from " << pClientInfo->print() << ": " << message.substr(0, 510) << " [...]\\r\\n";\r
        \r
        bool bError = true;\r
        MessageParserState state = New;\r
index 0594fe99e3354644576b3a9d19e21e4085d34c0c..5c2f2225aa3445edaa8349f7a0541b6447691176 100644 (file)
@@ -59,7 +59,7 @@ private:
        unsigned int currentlySendingOffset_;\r
 \r
        std::vector<wchar_t> wideRecvBuffer_;\r
-       char recvBuffer_[512];\r
+       char recvBuffer_[8192];\r
        int recvLeftoverOffset_;\r
 };\r
 typedef std::tr1::shared_ptr<SocketInfo> SocketInfoPtr;\r