Gateway Server clean up

This commit is contained in:
HikikoMarmy
2025-04-14 03:54:24 +01:00
parent ed2a53d76a
commit ea09bc2109
5 changed files with 90 additions and 27 deletions

View File

@@ -0,0 +1,17 @@
#pragma once
#include <map>
#include <functional>
#include <memory>
#include "../../Network/GenericNetRequest.hpp"
#include "GetServerAddressEvent.h"
const std::map< int16_t, std::function< std::unique_ptr< GenericRequest >() > > LOBBY_EVENT_LOOKUP =
{
{ 0x43, []() -> std::unique_ptr< GenericRequest >
{
return std::make_unique< RequestGetServerAddress >();
}
}
};

View File

@@ -0,0 +1,32 @@
#include "../../global_define.h"
#include "GetServerAddressEvent.h"
void RequestGetServerAddress::Deserialize( sptr_byte_stream stream )
{
DeserializeHeader( stream );
}
sptr_generic_response RequestGetServerAddress::ProcessRequest( sptr_byte_stream stream )
{
Deserialize( stream);
return std::make_shared< ResultGetServerAddress >( this, Config::service_ip, Config::lobby_port );
}
ResultGetServerAddress::ResultGetServerAddress( GenericRequest *request, std::string ip, int32_t port ) : GenericResponse( *request )
{
m_ip = ip;
m_port = port;
}
ByteStream& ResultGetServerAddress::Serialize()
{
m_stream.write_u16( m_packetId );
m_stream.write_u32( m_requestId );
m_stream.write_u32( 0 );
m_stream.write_sz_utf8( m_ip );
m_stream.write( m_port );
return m_stream;
}

View File

@@ -0,0 +1,20 @@
#pragma once
class RequestGetServerAddress : public GenericRequest {
public:
static std::unique_ptr< RequestGetServerAddress > Create()
{
return std::make_unique< RequestGetServerAddress >();
}
sptr_generic_response ProcessRequest( sptr_byte_stream stream ) override;
void Deserialize( sptr_byte_stream stream ) override;
};
class ResultGetServerAddress : public GenericResponse {
public:
std::string m_ip;
int32_t m_port;
ResultGetServerAddress( GenericRequest *request, std::string ip, int32_t port );
ByteStream &Serialize();
};

View File

@@ -6,11 +6,10 @@
// ╚═╝╩ ╩ ╩ ╚═╝╚╩╝╩ ╩ ╩ ╚═╝╚═╝╩╚═ ╚╝ ╚═╝╩╚═ // ╚═╝╩ ╩ ╩ ╚═╝╚╩╝╩ ╩ ╩ ╚═╝╚═╝╩╚═ ╚╝ ╚═╝╩╚═
#include <map> #include <map>
#include <functional>
#include "../global_define.h" #include "../global_define.h"
#include "GatewayServer.h" #include "GatewayServer.h"
#include "EventHandlers/GatewayEvents.h" #include "Event/GatewayEvents.h"
typedef std::map< int16_t, std::function< std::unique_ptr< GenericRequest >() > > CommandMap; typedef std::map< int16_t, std::function< std::unique_ptr< GenericRequest >() > > CommandMap;
@@ -35,7 +34,6 @@ GatewayServer::GatewayServer()
GatewayServer::~GatewayServer() GatewayServer::~GatewayServer()
{ {
Log::Info( "Gateway Server stopped." ); Log::Info( "Gateway Server stopped." );
m_timer.Stop();
} }
void GatewayServer::Start( std::string ip, int32_t port ) void GatewayServer::Start( std::string ip, int32_t port )
@@ -97,8 +95,6 @@ void GatewayServer::Run()
timeval timeout = { 0, 1000 }; timeval timeout = { 0, 1000 };
m_timer.Start();
while( m_running ) while( m_running )
{ {
FD_ZERO( &readSet ); FD_ZERO( &readSet );
@@ -153,18 +149,18 @@ void GatewayServer::AcceptNewClient()
return; return;
} }
auto new_client = std::make_shared< RealmTCPSocket >(); auto new_socket = std::make_shared< RealmSocket >();
new_client->fd = clientSocket; new_socket->fd = clientSocket;
new_client->remote_addr = clientInfo; new_socket->remote_addr = clientInfo;
new_client->remote_ip = inet_ntoa( clientInfo.sin_addr ); new_socket->remote_ip = inet_ntoa( clientInfo.sin_addr );
new_client->remote_port = ntohs( clientInfo.sin_port ); new_socket->remote_port = ntohs( clientInfo.sin_port );
m_clientSockets.push_back( new_client ); m_clientSockets.push_back( new_socket );
Log::Info( "[GATEWAY] New client connected : (%s)", new_client->remote_ip.c_str() ); //Log::Info( "[GATEWAY] New client connected : (%s)", new_client->remote_ip.c_str() );
} }
void GatewayServer::ReadSocket( sptr_tcp_socket socket ) void GatewayServer::ReadSocket( sptr_socket socket )
{ {
if( socket->flag.disconnected ) if( socket->flag.disconnected )
{ {
@@ -213,7 +209,7 @@ void GatewayServer::ReadSocket( sptr_tcp_socket socket )
} }
} }
void GatewayServer::WriteSocket( sptr_tcp_socket socket ) void GatewayServer::WriteSocket( sptr_socket socket )
{ {
if( socket->flag.disconnected ) if( socket->flag.disconnected )
{ {
@@ -254,7 +250,7 @@ void GatewayServer::WriteSocket( sptr_tcp_socket socket )
socket->m_pendingWriteBuffer.erase( socket->m_pendingWriteBuffer.begin(), socket->m_pendingWriteBuffer.begin() + totalBytesSent ); socket->m_pendingWriteBuffer.erase( socket->m_pendingWriteBuffer.begin(), socket->m_pendingWriteBuffer.begin() + totalBytesSent );
} }
void GatewayServer::HandleRequest( sptr_tcp_socket socket, sptr_byte_stream stream ) void GatewayServer::HandleRequest( sptr_socket socket, sptr_byte_stream stream )
{ {
auto packetId = stream->read< uint16_t >(); auto packetId = stream->read< uint16_t >();
stream->set_position( 0 ); stream->set_position( 0 );
@@ -262,15 +258,15 @@ void GatewayServer::HandleRequest( sptr_tcp_socket socket, sptr_byte_stream stre
auto it = GATEWAY_REQUEST_LOOKUP.find( packetId ); auto it = GATEWAY_REQUEST_LOOKUP.find( packetId );
if( it == GATEWAY_REQUEST_LOOKUP.end() ) if( it == GATEWAY_REQUEST_LOOKUP.end() )
{ {
Log::Error( "[GATEWAY] Unknown packet id : 0x%04X", packetId ); //Log::Error( "[GATEWAY] Unknown packet id : 0x%04X", packetId );
return; return;
} }
Log::Debug( "[GATEWAY] Request processed : 0x%04X", packetId ); //Log::Debug( "[GATEWAY] Request processed : 0x%04X", packetId );
auto request = it->second(); auto request = it->second();
if (auto res = request->ProcessRequest(stream)) if( auto res = request->ProcessRequest( stream ) )
{ {
socket->send(res); socket->send( res );
} }
} }

View File

@@ -5,8 +5,8 @@
class GatewayServer class GatewayServer
{ {
static inline std::unique_ptr< GatewayServer > m_instance; static inline std::unique_ptr< GatewayServer > m_instance;
public:
public:
static GatewayServer& Get() static GatewayServer& Get()
{ {
if( m_instance == nullptr ) if( m_instance == nullptr )
@@ -28,19 +28,17 @@ public:
} }
private: private:
Timer m_timer;
std::atomic< bool > m_running; std::atomic< bool > m_running;
std::thread m_thread; std::thread m_thread;
SOCKET m_listenSocket; SOCKET m_listenSocket;
std::vector< sptr_tcp_socket > m_clientSockets; std::vector< sptr_socket > m_clientSockets;
std::vector< uint8_t > m_recvBuffer; std::vector< uint8_t > m_recvBuffer;
void Run(); void Run();
void AcceptNewClient(); void AcceptNewClient();
void ReadSocket( sptr_tcp_socket socket ); void ReadSocket( sptr_socket socket );
void WriteSocket( sptr_tcp_socket socket ); void WriteSocket( sptr_socket socket );
void HandleRequest( sptr_tcp_socket socket, sptr_byte_stream stream ); void HandleRequest( sptr_socket socket, sptr_byte_stream stream );
}; };