This commit is contained in:
2025-09-21 15:39:23 -05:00
parent 067a1d26b3
commit 450e0a9603

View File

@@ -201,9 +201,8 @@ void packet_server::initialize(const uint16_t &port, uint8_t pool_size) {
void packet_server::listen_for_connection(tcp::acceptor &acceptor) { void packet_server::listen_for_connection(tcp::acceptor &acceptor) {
auto conn = auto conn =
std::make_shared<packet_server::connection>(io_context_, acceptor); std::make_shared<packet_server::connection>(io_context_, acceptor);
acceptor.async_accept(conn->socket, [this, conn](auto &&err) { acceptor.async_accept(conn->socket,
on_accept(conn, std::forward<decltype(err)>(err)); [this, conn](auto &&err) { on_accept(conn, err); });
});
} }
void packet_server::on_accept(std::shared_ptr<connection> conn, void packet_server::on_accept(std::shared_ptr<connection> conn,
@@ -219,14 +218,17 @@ void packet_server::on_accept(std::shared_ptr<connection> conn,
conn->socket.set_option(boost::asio::ip::tcp::no_delay(true)); conn->socket.set_option(boost::asio::ip::tcp::no_delay(true));
conn->socket.set_option(boost::asio::socket_base::linger(false, 0)); conn->socket.set_option(boost::asio::socket_base::linger(false, 0));
conn->socket.set_option(boost::asio::socket_base::keep_alive(true));
if (not handshake(conn)) { boost::asio::dispatch(conn->socket.get_executor(), [this, conn]() {
conn->socket.close(); if (not handshake(conn)) {
return; conn->socket.close();
} return;
}
packet response; packet response;
send_response(conn, 0, response); send_response(conn, 0, response);
});
} }
void packet_server::read_header(std::shared_ptr<connection> conn) { void packet_server::read_header(std::shared_ptr<connection> conn) {
@@ -236,14 +238,15 @@ void packet_server::read_header(std::shared_ptr<connection> conn) {
boost::asio::async_read( boost::asio::async_read(
conn->socket, conn->socket,
boost::asio::buffer(conn->buffer.data(), conn->buffer.size()), boost::asio::buffer(conn->buffer.data(), conn->buffer.size()),
[this, conn](boost::system::error_code err, std::size_t) { [this, conn](auto &&err, auto &&) {
if (err) { if (err) {
remove_client(*conn); remove_client(*conn);
repertory::utils::error::raise_error(function_name, err.message()); repertory::utils::error::raise_error(function_name, err.message());
return; return;
} }
auto to_read = *reinterpret_cast<std::uint32_t *>(conn->buffer.data()); std::uint32_t to_read{};
std::memcpy(&to_read, conn->buffer.data(), sizeof(to_read));
boost::endian::big_to_native_inplace(to_read); boost::endian::big_to_native_inplace(to_read);
read_packet(conn, to_read); read_packet(conn, to_read);
}); });
@@ -355,15 +358,15 @@ void packet_server::send_response(std::shared_ptr<connection> conn,
response.encrypt(encryption_token_); response.encrypt(encryption_token_);
response.to_buffer(conn->buffer); response.to_buffer(conn->buffer);
boost::asio::async_write( boost::asio::async_write(conn->socket, boost::asio::buffer(conn->buffer),
conn->socket, boost::asio::buffer(conn->buffer), [this, conn](auto &&err, auto &&) {
[this, conn](boost::system::error_code err, std::size_t /*length*/) { if (err) {
if (err) { remove_client(*conn);
remove_client(*conn); utils::error::raise_error(function_name,
utils::error::raise_error(function_name, err.message()); err.message());
} else { } else {
read_header(conn); read_header(conn);
} }
}); });
} }
} // namespace repertory } // namespace repertory