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); } }