diff --git a/services/lib/src/Worker.h b/services/lib/src/Worker.h new file mode 100644 --- /dev/null +++ b/services/lib/src/Worker.h @@ -0,0 +1,49 @@ +#pragma once + +#include "GlobalTools.h" + +#include +#include + +#include +#include + +typedef std::function Task; +typedef std::function)> Callback; + +namespace comm { +namespace network { + +class Worker { + std::unique_ptr pool; + + Worker() { + this->pool = + std::make_unique(tools::getNumberOfCpus()); + } + + virtual ~Worker() { + this->pool->join(); + } + +public: + static Worker &getInstance() { + static Worker instance; + return instance; + } + + void schedule(Task task, Callback callback) { + boost::asio::post(*this->pool, [task, callback]() { + std::unique_ptr err = nullptr; + try { + task(); + } catch (std::exception &e) { + err = std::make_unique(e.what()); + } + callback(std::move(err)); + }); + } +}; + +} // namespace network +} // namespace comm