From 037511a364629d200c22cd08e0fa4922f2429bfc Mon Sep 17 00:00:00 2001 From: MikalaiR Date: Wed, 23 Sep 2015 19:23:39 +0000 Subject: SkypeWeb: code optimization git-svn-id: http://svn.miranda-ng.org/main/trunk@15429 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/SkypeWeb/src/request_queue.cpp | 8 +++----- protocols/SkypeWeb/src/request_queue.h | 3 ++- protocols/SkypeWeb/src/skype_login.cpp | 2 +- protocols/SkypeWeb/src/skype_polling.cpp | 2 +- protocols/SkypeWeb/src/skype_proto.cpp | 10 +--------- protocols/SkypeWeb/src/skype_proto.h | 6 +++--- protocols/SkypeWeb/src/skype_trouter.cpp | 8 ++++---- protocols/SkypeWeb/src/skype_utils.h | 30 ++++++++++++++++++++++++++++++ 8 files changed, 45 insertions(+), 24 deletions(-) diff --git a/protocols/SkypeWeb/src/request_queue.cpp b/protocols/SkypeWeb/src/request_queue.cpp index 1e8113cfdb..5d6cb2893a 100644 --- a/protocols/SkypeWeb/src/request_queue.cpp +++ b/protocols/SkypeWeb/src/request_queue.cpp @@ -22,13 +22,11 @@ hConnection(hConnection), requests(1) { isTerminated = true; hRequestQueueThread = NULL; - hRequestQueueEvent = CreateEvent(NULL, FALSE, FALSE, NULL); } RequestQueue::~RequestQueue() { requests.destroy(); - CloseHandle(hRequestQueueEvent); } void RequestQueue::Start() @@ -47,7 +45,7 @@ void RequestQueue::Stop() return; isTerminated = true; - SetEvent(hRequestQueueEvent); + hRequestQueueEvent.Set(); } void RequestQueue::Push(HttpRequest *request, HttpResponseCallback response, void *arg) @@ -61,7 +59,7 @@ void RequestQueue::Push(HttpRequest *request, HttpResponseCallback response, voi requests.insert(item); } - SetEvent(hRequestQueueEvent); + hRequestQueueEvent.Set(); } void RequestQueue::Send(HttpRequest *request, HttpResponseCallback response, void *arg) @@ -96,7 +94,7 @@ unsigned int RequestQueue::WorkerThread(void *arg) while (!queue->isTerminated) { - WaitForSingleObject(queue->hRequestQueueEvent, INFINITE); + queue->hRequestQueueEvent.Wait(); while (true) { RequestQueueItem *item = NULL; diff --git a/protocols/SkypeWeb/src/request_queue.h b/protocols/SkypeWeb/src/request_queue.h index c8e1948819..962a03aef5 100644 --- a/protocols/SkypeWeb/src/request_queue.h +++ b/protocols/SkypeWeb/src/request_queue.h @@ -47,7 +47,8 @@ private: HANDLE hConnection; mir_cs requestQueueLock; LIST requests; - HANDLE hRequestQueueEvent, hRequestQueueThread; + EventHandle hRequestQueueEvent; + HANDLE hRequestQueueThread; void Execute(RequestQueueItem *item); diff --git a/protocols/SkypeWeb/src/skype_login.cpp b/protocols/SkypeWeb/src/skype_login.cpp index 13b6e605fe..467396baae 100644 --- a/protocols/SkypeWeb/src/skype_login.cpp +++ b/protocols/SkypeWeb/src/skype_login.cpp @@ -263,7 +263,7 @@ void CSkypeProto::OnCapabilitiesSended(const NETLIBHTTPREQUEST *response) FreeList(skypenames); skypenames.destroy(); - SetEvent(m_hPollingEvent); + m_hPollingEvent.Set(); SendRequest(new LoadChatsRequest(li), &CSkypeProto::OnLoadChats); SendRequest(new CreateTrouterRequest(), &CSkypeProto::OnCreateTrouter); diff --git a/protocols/SkypeWeb/src/skype_polling.cpp b/protocols/SkypeWeb/src/skype_polling.cpp index 423fb399a9..59c167b9cc 100644 --- a/protocols/SkypeWeb/src/skype_polling.cpp +++ b/protocols/SkypeWeb/src/skype_polling.cpp @@ -24,7 +24,7 @@ void CSkypeProto::PollingThread(void*) int nErrors = 0; while (!m_bThreadsTerminated) { - WaitForSingleObject(m_hPollingEvent, INFINITE); + m_hPollingEvent.Wait(); nErrors = 0; while ((nErrors < POLLING_ERRORS_LIMIT) && m_iStatus != ID_STATUS_OFFLINE) diff --git a/protocols/SkypeWeb/src/skype_proto.cpp b/protocols/SkypeWeb/src/skype_proto.cpp index d8b5c823b4..54d443256e 100644 --- a/protocols/SkypeWeb/src/skype_proto.cpp +++ b/protocols/SkypeWeb/src/skype_proto.cpp @@ -46,10 +46,6 @@ CSkypeProto::CSkypeProto(const char* protoName, const TCHAR* userName) : SkinAddNewSoundEx("skype_inc_call", "SkypeWeb", LPGEN("Incoming call sound")); SkinAddNewSoundEx("skype_call_canceled", "SkypeWeb", LPGEN("Incoming call canceled sound")); - m_hTrouterEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - m_hPollingEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - m_hTrouterHealthEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - SkypeSetTimer(); m_hPollingThread = ForkThreadEx(&CSkypeProto::PollingThread, NULL, NULL); @@ -69,16 +65,12 @@ CSkypeProto::~CSkypeProto() TerminateThread(m_hPollingThread, NULL); m_hPollingThread = NULL; } - CloseHandle(m_hPollingEvent); m_hPollingEvent = NULL; if (m_hTrouterThread) { TerminateThread(m_hTrouterThread, NULL); m_hTrouterThread = NULL; } - CloseHandle(m_hTrouterEvent); m_hTrouterEvent = NULL; - - CloseHandle(m_hTrouterHealthEvent); SkypeUnsetTimer(); } @@ -93,7 +85,7 @@ int CSkypeProto::OnPreShutdown(WPARAM, LPARAM) ShutdownConnections(); - SetEvent(m_hPollingEvent); + m_hPollingEvent.Set(); return 0; } diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h index 2edf1a3ac4..cb53e1690f 100644 --- a/protocols/SkypeWeb/src/skype_proto.h +++ b/protocols/SkypeWeb/src/skype_proto.h @@ -126,10 +126,10 @@ private: bool m_bThreadsTerminated; - HANDLE m_hPollingEvent; - HANDLE m_hTrouterEvent; + EventHandle m_hPollingEvent; + EventHandle m_hTrouterEvent; - HANDLE m_hTrouterHealthEvent; + EventHandle m_hTrouterHealthEvent; static CSkypeProto* GetContactAccount(MCONTACT hContact); int __cdecl OnAccountLoaded(WPARAM, LPARAM); diff --git a/protocols/SkypeWeb/src/skype_trouter.cpp b/protocols/SkypeWeb/src/skype_trouter.cpp index d53ce95b0f..68ec568c24 100644 --- a/protocols/SkypeWeb/src/skype_trouter.cpp +++ b/protocols/SkypeWeb/src/skype_trouter.cpp @@ -104,8 +104,8 @@ void CSkypeProto::OnGetTrouter(const NETLIBHTTPREQUEST *response) CMStringA szToken = data.Tokenize(":", iStart).Trim(); TRouter.sessId = szToken.GetString(); - SetEvent(m_hTrouterEvent); - SetEvent(m_hTrouterHealthEvent); + m_hTrouterEvent.Set(); + m_hTrouterHealthEvent.Set(); if ((time(NULL) - TRouter.lastRegistrationTime) >= 3600) { @@ -136,7 +136,7 @@ void CSkypeProto::TRouterThread(void*) while (!m_bThreadsTerminated) { - WaitForSingleObject(m_hTrouterEvent, INFINITE); + m_hTrouterEvent.Wait(); errors = 0; while (errors < POLLING_ERRORS_LIMIT && m_iStatus > ID_STATUS_OFFLINE) @@ -169,7 +169,7 @@ void CSkypeProto::TRouterThread(void*) else { SendRequest(new HealthTrouterRequest(TRouter.ccid.c_str()), &CSkypeProto::OnHealth); - WaitForSingleObject(m_hTrouterHealthEvent, INFINITE); + m_hTrouterHealthEvent.Wait(); } m_TrouterConnection = response->nlc; } diff --git a/protocols/SkypeWeb/src/skype_utils.h b/protocols/SkypeWeb/src/skype_utils.h index b50b65546a..1a608bce47 100644 --- a/protocols/SkypeWeb/src/skype_utils.h +++ b/protocols/SkypeWeb/src/skype_utils.h @@ -76,5 +76,35 @@ public: __inline char *get_reason() { return mir_strdup(szReason); } }; +class EventHandle +{ + HANDLE _hEvent; +public: + inline EventHandle() + { + _hEvent = CreateEvent(NULL, 0, 0, NULL); + } + inline ~EventHandle() + { + CloseHandle(_hEvent); + } + inline void Set() + { + SetEvent(_hEvent); + } + inline void Wait() + { + WaitForSingleObject(_hEvent, INFINITE); + } + inline void Wait(DWORD dwMilliseconds) + { + WaitForSingleObject(_hEvent, dwMilliseconds); + } + inline operator HANDLE() + { + return _hEvent; + } +}; + #endif //_UTILS_H_ \ No newline at end of file -- cgit v1.2.3