mirror of
https://github.com/HikikoMarmy/Champions-Reborn-Server.git
synced 2026-04-05 08:59:54 -03:00
Improvements to sockets for thread safety
This commit is contained in:
@@ -1,16 +1,18 @@
|
||||
#include "../global_define.h"
|
||||
#include "RealmSocket.h"
|
||||
#include "../Common/Utility.h"
|
||||
|
||||
RealmSocket::RealmSocket()
|
||||
{
|
||||
fd = INVALID_SOCKET;
|
||||
|
||||
memset( &local_addr, 0, sizeof( local_addr ) );
|
||||
memset( &remote_addr, 0, sizeof( remote_addr ) );
|
||||
std::memset( &local_addr, 0, sizeof( local_addr ) );
|
||||
std::memset( &remote_addr, 0, sizeof( remote_addr ) );
|
||||
|
||||
remote_ip = "";
|
||||
remote_port = 0;
|
||||
|
||||
flag.disconnected = 0;
|
||||
flag.disconnected_wait = 0;
|
||||
flag.disconnected_forced = 0;
|
||||
flag.is_listener = 0;
|
||||
flag.want_more_read_data = 0;
|
||||
flag.want_more_write_data = 0;
|
||||
@@ -32,13 +34,14 @@ RealmSocket::~RealmSocket()
|
||||
|
||||
fd = INVALID_SOCKET;
|
||||
|
||||
memset( &local_addr, 0, sizeof( local_addr ) );
|
||||
memset( &remote_addr, 0, sizeof( remote_addr ) );
|
||||
std::memset( &local_addr, 0, sizeof( local_addr ) );
|
||||
std::memset( &remote_addr, 0, sizeof( remote_addr ) );
|
||||
|
||||
remote_ip = "";
|
||||
remote_port = 0;
|
||||
|
||||
flag.disconnected = 0;
|
||||
flag.disconnected_wait = 0;
|
||||
flag.disconnected_forced = 0;
|
||||
flag.is_listener = 0;
|
||||
flag.want_more_read_data = 0;
|
||||
flag.want_more_write_data = 0;
|
||||
@@ -48,27 +51,26 @@ RealmSocket::~RealmSocket()
|
||||
latency = 0;
|
||||
|
||||
m_pendingWriteBuffer.reserve( WRITE_BUFFER_SIZE );
|
||||
|
||||
}
|
||||
|
||||
void RealmSocket::send( const sptr_generic_response response )
|
||||
{
|
||||
auto &stream = response->Serialize();
|
||||
auto netSize = htonl( static_cast< uint32_t >( stream.get_position() ) + 4 );
|
||||
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.data.begin(), stream.data.end() );
|
||||
|
||||
Log::Packet( response->m_stream.data, response->m_stream.get_length(), true);
|
||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream.m_buffer.begin(), stream.m_buffer.end() );
|
||||
}
|
||||
|
||||
void RealmSocket::send( GenericMessage &message )
|
||||
{
|
||||
auto &stream = message.Serialize();
|
||||
auto netSize = htonl( static_cast< uint32_t >( stream.get_position() ) + 4 );
|
||||
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.data.begin(), stream.data.end() );
|
||||
|
||||
Log::Packet( stream.data, stream.get_length(), true );
|
||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream.m_buffer.begin(), stream.m_buffer.end() );
|
||||
}
|
||||
@@ -1,14 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <mutex>
|
||||
#include <winsock2.h>
|
||||
|
||||
// Forward Declare GenericResponse
|
||||
class GenericResponse;
|
||||
typedef std::shared_ptr< GenericResponse > sptr_generic_response;
|
||||
|
||||
// Forward Declare Generic Message
|
||||
class GenericMessage;
|
||||
#include "GenericNetRequest.h"
|
||||
#include "GenericNetResponse.h"
|
||||
#include "GenericNetMessage.h"
|
||||
|
||||
class RealmSocket
|
||||
{
|
||||
@@ -37,7 +36,8 @@ public:
|
||||
SOCKET fd;
|
||||
|
||||
struct s_flag {
|
||||
bool disconnected;
|
||||
bool disconnected_wait;
|
||||
bool disconnected_forced;
|
||||
bool is_listener;
|
||||
bool want_more_read_data;
|
||||
bool want_more_write_data;
|
||||
@@ -47,8 +47,7 @@ public:
|
||||
sockaddr_in remote_addr;
|
||||
|
||||
std::string remote_ip;
|
||||
int32_t remote_port;
|
||||
|
||||
uint32_t remote_port;
|
||||
uint32_t last_write_position;
|
||||
|
||||
uint64_t latency;
|
||||
@@ -64,4 +63,4 @@ public:
|
||||
std::vector< uint8_t > m_pendingReadBuffer;
|
||||
};
|
||||
|
||||
typedef std::shared_ptr< RealmSocket > sptr_socket;
|
||||
using sptr_socket = std::shared_ptr< RealmSocket >;
|
||||
|
||||
Reference in New Issue
Block a user