Improvements to sockets for thread safety

This commit is contained in:
HikikoMarmy
2025-06-15 00:17:38 +01:00
parent 904722b74c
commit cb1daf15a6
2 changed files with 27 additions and 26 deletions

View File

@@ -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() );
}

View File

@@ -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 >;