summaryrefslogtreecommitdiff
path: root/protocols/Steam/src/request_queue.h
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Steam/src/request_queue.h')
-rw-r--r--protocols/Steam/src/request_queue.h59
1 files changed, 59 insertions, 0 deletions
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<RequestQueueItem> 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