refactor
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user