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) {
auto conn =
std::make_shared<packet_server::connection>(io_context_, acceptor);
acceptor.async_accept(conn->socket, [this, conn](auto &&err) {
on_accept(conn, std::forward<decltype(err)>(err));
});
acceptor.async_accept(conn->socket,
[this, conn](auto &&err) { on_accept(conn, err); });
}
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::socket_base::linger(false, 0));
conn->socket.set_option(boost::asio::socket_base::keep_alive(true));
if (not handshake(conn)) {
conn->socket.close();
return;
}
boost::asio::dispatch(conn->socket.get_executor(), [this, conn]() {
if (not handshake(conn)) {
conn->socket.close();
return;
}
packet response;
send_response(conn, 0, response);
packet response;
send_response(conn, 0, response);
});
}
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(
conn->socket,
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) {
remove_client(*conn);
repertory::utils::error::raise_error(function_name, err.message());
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);
read_packet(conn, to_read);
});
@@ -355,15 +358,15 @@ void packet_server::send_response(std::shared_ptr<connection> conn,
response.encrypt(encryption_token_);
response.to_buffer(conn->buffer);
boost::asio::async_write(
conn->socket, boost::asio::buffer(conn->buffer),
[this, conn](boost::system::error_code err, std::size_t /*length*/) {
if (err) {
remove_client(*conn);
utils::error::raise_error(function_name, err.message());
} else {
read_header(conn);
}
});
boost::asio::async_write(conn->socket, boost::asio::buffer(conn->buffer),
[this, conn](auto &&err, auto &&) {
if (err) {
remove_client(*conn);
utils::error::raise_error(function_name,
err.message());
} else {
read_header(conn);
}
});
}
} // namespace repertory