replace tcp networking with boost::asio tcp networking

This commit is contained in:
Lion Kortlepel
2022-10-05 15:44:32 +02:00
parent 7446526a19
commit 7d2e4d4581
9 changed files with 388 additions and 453 deletions

View File

@@ -2,6 +2,7 @@
#include "CustomAssert.h"
#include "TServer.h"
#include <boost/system/detail/error_code.hpp>
#include <memory>
#include <optional>
@@ -49,16 +50,27 @@ TClient::TVehicleDataLockPair TClient::GetAllCars() {
std::string TClient::GetCarPositionRaw(int Ident) {
std::unique_lock lock(mVehiclePositionMutex);
try
{
try {
return mVehiclePosition.at(Ident);
}
catch (const std::out_of_range& oor) {
} catch (const std::out_of_range& oor) {
return "";
}
return "";
}
void TClient::Disconnect(std::string_view Reason) {
beammp_debugf("Disconnecting client {} for reason: {}", GetID(), Reason);
boost::system::error_code ec;
mSocket.shutdown(socket_base::shutdown_both, ec);
if (ec) {
beammp_warnf("Failed to shutdown client socket: {}", ec.what());
}
mSocket.close(ec);
if (ec) {
beammp_warnf("Failed to close client socket: {}", ec.what());
}
}
void TClient::SetCarPosition(int Ident, const std::string& Data) {
std::unique_lock lock(mVehiclePositionMutex);
mVehiclePosition[Ident] = Data;
@@ -98,16 +110,22 @@ TServer& TClient::Server() const {
return mServer;
}
void TClient::EnqueuePacket(const std::string& Packet) {
void TClient::EnqueuePacket(const std::vector<uint8_t>& Packet) {
std::unique_lock Lock(mMissedPacketsMutex);
mPacketsSync.push(Packet);
}
TClient::TClient(TServer& Server)
TClient::TClient(TServer& Server, ip::tcp::socket&& Socket)
: mServer(Server)
, mSocket(std::move(Socket))
, mDownSocket(ip::tcp::socket(Server.IoCtx()))
, mLastPingTime(std::chrono::high_resolution_clock::now()) {
}
TClient::~TClient() {
beammp_debugf("client destroyed: {} ('{}')", this->GetID(), this->GetName());
}
void TClient::UpdatePingTime() {
mLastPingTime = std::chrono::high_resolution_clock::now();
}