diff --git a/dub.selections.json b/dub.selections.json index ef67255..f48c731 100644 --- a/dub.selections.json +++ b/dub.selections.json @@ -1,7 +1,6 @@ { "fileVersion": 1, "versions": { - "automem": "0.6.9", "cachetools": "0.3.1", "d-unit": "0.10.2", "ddbc": "0.5.9", @@ -12,12 +11,10 @@ "httparsed": "1.2.1", "mysql-native": "3.1.0", "odbc": "1.0.0", - "path-matcher": "1.1.3", + "path-matcher": "1.1.4", "requests": "2.1.3", "slf4d": "3.0.0", "streams": "3.5.0", - "test_allocator": "0.3.4", - "undead": "1.1.8", - "unit-threaded": "0.10.8" + "undead": "1.1.8" } } diff --git a/source/net/request_pool.d b/source/net/request_pool.d new file mode 100644 index 0000000..9453465 --- /dev/null +++ b/source/net/request_pool.d @@ -0,0 +1,69 @@ +module net.request_pool; + +import core.thread; +import core.sync.semaphore; + +import std.container; +import std.parallelism; + +import requests; +import slf4d; + +struct PRequest { + string url; + string method = "GET"; + QueryParam[] params; + + string body = ""; + string contentType = "text/plain"; +} + +class RequestPool { + private int m_totalWorkers; + private TaskPool m_taskPool; + private Logger _l; + + this(int totalWorkers = 4) { + this.m_totalWorkers = totalWorkers; + this._l = getLogger(); + } + + void startBackground() { + _l.debugF!"Starting RequestPool with %d workers"(this.m_totalWorkers); + this.m_taskPool = new TaskPool(this.m_totalWorkers); + } + + void request(PRequest request) { + auto t = task(&this.m_run, request); + this.m_taskPool.put(t); + } + + void stop() { + this.m_taskPool.finish(true); + } + + private void m_run(PRequest request) { + Request rq = Request(); + + _l.debugF!"Requesting [%s] %s"(request.method, request.url); + + Response rs; + + switch (request.method) { + case "GET": + rs = rq.get(request.url, request.params); + break; + + case "POST": + rs = rq.post(request.url, request.body, request.contentType); + break; + + default: + errorF!"Unknown request method: %s"(request.method); + return; + break; + } + + _l.debugF!"Request %s result code: %d"(request.url, rs.code); + } +}