mirror of
https://github.com/HikikoMarmy/Champions-Reborn-Server.git
synced 2026-04-05 00:49:48 -03:00
Reorganized and cleaned up the solution.
This commit is contained in:
80
Source/Network/RealmSocket.cpp
Normal file
80
Source/Network/RealmSocket.cpp
Normal file
@@ -0,0 +1,80 @@
|
||||
#include "Network/RealmSocket.hpp"
|
||||
#include "Common/Utility.hpp"
|
||||
|
||||
RealmSocket::RealmSocket()
|
||||
{
|
||||
fd = INVALID_SOCKET;
|
||||
|
||||
std::memset( &local_addr, 0, sizeof( local_addr ) );
|
||||
std::memset( &remote_addr, 0, sizeof( remote_addr ) );
|
||||
|
||||
remote_ip = "";
|
||||
remote_port = 0;
|
||||
|
||||
flag.disconnected_wait = 0;
|
||||
flag.disconnected_forced = 0;
|
||||
flag.is_listener = 0;
|
||||
flag.is_gateway = 0;
|
||||
flag.want_more_read_data = 0;
|
||||
flag.want_more_write_data = 0;
|
||||
|
||||
last_write_position = 0;
|
||||
|
||||
last_recv_time = std::chrono::steady_clock::now();
|
||||
last_send_time = std::chrono::steady_clock::now();
|
||||
|
||||
latency = 0;
|
||||
}
|
||||
|
||||
RealmSocket::~RealmSocket()
|
||||
{
|
||||
if( INVALID_SOCKET != fd )
|
||||
{
|
||||
closesocket( fd );
|
||||
}
|
||||
|
||||
fd = INVALID_SOCKET;
|
||||
|
||||
std::memset( &local_addr, 0, sizeof( local_addr ) );
|
||||
std::memset( &remote_addr, 0, sizeof( remote_addr ) );
|
||||
|
||||
remote_ip = "";
|
||||
remote_port = 0;
|
||||
|
||||
flag.disconnected_wait = 0;
|
||||
flag.disconnected_forced = 0;
|
||||
flag.is_listener = 0;
|
||||
flag.is_gateway = 0;
|
||||
flag.want_more_read_data = 0;
|
||||
flag.want_more_write_data = 0;
|
||||
|
||||
last_write_position = 0;
|
||||
|
||||
latency = 0;
|
||||
|
||||
m_pendingWriteBuffer.reserve( WRITE_BUFFER_SIZE );
|
||||
}
|
||||
|
||||
void RealmSocket::send( const sptr_generic_response response )
|
||||
{
|
||||
ByteBuffer stream;
|
||||
response->Serialize( stream );
|
||||
const auto netSize = Util::ByteSwap( static_cast< uint32_t >( stream.get_position() ) + 4 );
|
||||
|
||||
std::lock_guard< std::mutex > lock( write_mutex );
|
||||
|
||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), ( uint8_t * )&netSize, ( uint8_t * )&netSize + 4 );
|
||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream.m_buffer.begin(), stream.m_buffer.end() );
|
||||
}
|
||||
|
||||
void RealmSocket::send( const GenericMessage &message )
|
||||
{
|
||||
ByteBuffer stream;
|
||||
message.Serialize( stream );
|
||||
const auto netSize = Util::ByteSwap( static_cast< uint32_t >( stream.get_position() ) + 4 );
|
||||
|
||||
std::lock_guard< std::mutex > lock( write_mutex );
|
||||
|
||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), ( uint8_t * )&netSize, ( uint8_t * )&netSize + 4 );
|
||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream.m_buffer.begin(), stream.m_buffer.end() );
|
||||
}
|
||||
Reference in New Issue
Block a user