forked from sixonionpotatoes/commons
handle messages concurrently
This commit is contained in:
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user