From ebc91d7be8f31d98822b896852e40c341b614a48 Mon Sep 17 00:00:00 2001 From: MikalaiR Date: Fri, 14 Aug 2015 11:04:04 +0000 Subject: SkypeWeb: Async polling processing, more optimizations git-svn-id: http://svn.miranda-ng.org/main/trunk@14951 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/SkypeWeb/src/skype_polling.cpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'protocols/SkypeWeb/src/skype_polling.cpp') diff --git a/protocols/SkypeWeb/src/skype_polling.cpp b/protocols/SkypeWeb/src/skype_polling.cpp index 612547b1ee..b1b91a8d6f 100644 --- a/protocols/SkypeWeb/src/skype_polling.cpp +++ b/protocols/SkypeWeb/src/skype_polling.cpp @@ -17,39 +17,40 @@ along with this program. If not, see . #include "stdafx.h" -void CSkypeProto::ParsePollData(const JSONNode &data) +void CSkypeProto::ParsePollData(void *pData) { debugLogA("CSkypeProto::ParsePollData"); + JSONNode data = JSONNode::parse(ptrA((char*)pData)); + if (!data) return; + const JSONNode &node = data["eventMessages"]; - if (!node) - return; + if (!node) return; - const JSONNode &messages = node.as_array(); - for (size_t i = 0; i < messages.size(); i++) + for (auto it = node.begin(); it != node.end(); ++it) { - const JSONNode &message = messages.at(i); + const JSONNode &message = *it; const JSONNode &resType = message["resourceType"]; const JSONNode &resource = message["resource"]; std::string resourceType = resType.as_string(); - if (!mir_strcmpi(resourceType.c_str(), "NewMessage")) + if (resourceType == "NewMessage") { ProcessNewMessageRes(resource); } - else if (!mir_strcmpi(resourceType.c_str(), "UserPresence")) + else if (resourceType == "UserPresence") { ProcessUserPresenceRes(resource); } - else if (!mir_strcmpi(resourceType.c_str(), "EndpointPresence")) + else if (resourceType == "EndpointPresence") { ProcessEndpointPresenceRes(resource); } - else if (!mir_strcmpi(resourceType.c_str(), "ConversationUpdate")) + else if (resourceType == "ConversationUpdate") { ProcessConversationUpdateRes(resource); } - else if (!mir_strcmpi(resourceType.c_str(), "ThreadUpdate")) + else if (resourceType == "ThreadUpdate") { ProcessThreadUpdateRes(resource); } @@ -79,11 +80,9 @@ void CSkypeProto::PollingThread(void*) { if (response->pData) { - JSONNode root = JSONNode::parse(response->pData); - if (root["eventMessages"]) - { - ParsePollData(root); - } + void *pData = mir_alloc(response->dataLength); + memcpy(pData, response->pData, response->dataLength); + ForkThread(&CSkypeProto::ParsePollData, pData); } } else -- cgit v1.2.3