handle messages concurrently

This commit is contained in:
2022-04-26 20:30:23 +02:00
parent 06b00843d2
commit 14d0716607
3 changed files with 48 additions and 20 deletions

View File

@@ -2,6 +2,7 @@
#include <boost/asio.hpp>
#include <cstdlib>
#include <future>
#include <iostream>
#include "protocol.hpp"
@@ -12,6 +13,15 @@ namespace commons {
using boost::asio::ip::udp;
using namespace protocol;
class fake_thread_pool {
public:
template <typename Task>
static void add_task(Task&& task) {
std::thread t{std::forward<Task&&>(task)};
t.detach();
}
};
class server {
public:
server(boost::asio::io_context& io_context, short port)
@@ -25,14 +35,20 @@ class server {
boost::asio::buffer(data_.data(), max_length), sender_endpoint_,
[this](boost::system::error_code ec, std::size_t bytes_recvd) {
if (!ec && bytes_recvd > 0) {
auto msg_obj = deserialize(data_.data(), bytes_recvd);
msg_obj->handle_message();
std::shared_ptr<protocol::generic_message_base> msg_obj =
deserialize(data_.data(), bytes_recvd);
do_send(bytes_recvd);
fake_thread_pool::add_task([msg_obj = std::move(msg_obj)]() {
msg_obj->handle_message();
});
// do_send(bytes_recvd);
spdlog::debug("leaving do receive");
} else {
do_receive();
spdlog::error("error during do receive");
}
do_receive();
});
}