From ab75f8e4a3968c956425844415237a4fa6fcee63 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Tue, 26 May 2015 19:15:20 +0000 Subject: Steam: merge new api git-svn-id: http://svn.miranda-ng.org/main/trunk@13850 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Steam/src/request_queue.h | 59 +++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 protocols/Steam/src/request_queue.h (limited to 'protocols/Steam/src/request_queue.h') diff --git a/protocols/Steam/src/request_queue.h b/protocols/Steam/src/request_queue.h new file mode 100644 index 0000000000..3a213be0bf --- /dev/null +++ b/protocols/Steam/src/request_queue.h @@ -0,0 +1,59 @@ +#ifndef _REQUEST_QUEUE_H_ +#define _REQUEST_QUEUE_H_ + +typedef void(*HttpResponseCallback)(const NETLIBHTTPREQUEST *response, void *arg); +typedef void(*HttpFinallyCallback)(void *arg); + +struct RequestQueueItem +{ + void *arg; + HttpRequest *request; + HttpResponseCallback responseCallback; + HttpFinallyCallback finallyCallback; + + RequestQueueItem(HttpRequest *request, void *arg, HttpFinallyCallback finallyCallback) : + request(request), responseCallback(NULL), arg(arg), finallyCallback(finallyCallback) + { + } + + RequestQueueItem(HttpRequest *request, HttpResponseCallback response, void *arg, HttpFinallyCallback finallyCallback) : + request(request), responseCallback(response), arg(arg), finallyCallback(finallyCallback) + { + } + + ~RequestQueueItem() + { + delete request; + request = NULL; + responseCallback = NULL; + finallyCallback = NULL; + } +}; + +class RequestQueue +{ +private: + bool isTerminated; + HANDLE hConnection; + mir_cs requestQueueLock; + LIST requests; + HANDLE hRequestQueueEvent, hRequestQueueThread; + + void Execute(RequestQueueItem *item); + + static unsigned int __cdecl AsyncSendThread(void*, void*); + static unsigned int __cdecl WorkerThread(void*); + +public: + RequestQueue(HANDLE hConnection); + ~RequestQueue(); + + void Start(); + void Stop(); + + void Push(HttpRequest *request, HttpResponseCallback response = NULL, void *arg = NULL, HttpFinallyCallback last = NULL); + void Send(HttpRequest *request, HttpResponseCallback response = NULL, void *arg = NULL, HttpFinallyCallback last = NULL); + +}; + +#endif //_REQUEST_QUEUE_H_ \ No newline at end of file -- cgit v1.2.3