Gateway Server clean up
This commit is contained in:
17
Gateway Server/Event/GatewayEvents.h
Normal file
17
Gateway Server/Event/GatewayEvents.h
Normal 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 >();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
32
Gateway Server/Event/GetServerAddressEvent.cpp
Normal file
32
Gateway Server/Event/GetServerAddressEvent.cpp
Normal 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;
|
||||||
|
}
|
||||||
20
Gateway Server/Event/GetServerAddressEvent.h
Normal file
20
Gateway Server/Event/GetServerAddressEvent.h
Normal 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();
|
||||||
|
};
|
||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 );
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user