We didn't need a UDP socket after all

This commit is contained in:
HikikoMarmy
2025-04-14 03:55:40 +01:00
parent 96afe82342
commit 8b3d6cc62a
2 changed files with 28 additions and 129 deletions

View File

@@ -1,4 +1,3 @@
#include "../global_define.h"
RealmSocket::RealmSocket()
@@ -8,9 +7,6 @@ RealmSocket::RealmSocket()
memset( &local_addr, 0, sizeof( local_addr ) );
memset( &remote_addr, 0, sizeof( remote_addr ) );
local_ip = "";
local_port = 0;
remote_ip = "";
remote_port = 0;
@@ -21,9 +17,10 @@ RealmSocket::RealmSocket()
last_write_position = 0;
last_recv_time = std::chrono::steady_clock::now();
last_send_time = std::chrono::steady_clock::now();
latency = 0;
last_recv_time = 0;
last_send_time = 0;
}
RealmSocket::~RealmSocket()
@@ -38,9 +35,6 @@ RealmSocket::~RealmSocket()
memset( &local_addr, 0, sizeof( local_addr ) );
memset( &remote_addr, 0, sizeof( remote_addr ) );
local_ip = "";
local_port = 0;
remote_ip = "";
remote_port = 0;
@@ -52,72 +46,33 @@ RealmSocket::~RealmSocket()
last_write_position = 0;
latency = 0;
last_recv_time = 0;
last_send_time = 0;
}
RealmTCPSocket::RealmTCPSocket()
{
m_pendingWriteBuffer.reserve( WRITE_BUFFER_SIZE );
}
RealmTCPSocket::~RealmTCPSocket()
void RealmSocket::send( const sptr_byte_stream stream )
{
}
void RealmTCPSocket::send( const sptr_byte_stream stream )
{
auto packetSize = htonl( stream->get_position() );
auto packetSize = htonl( static_cast< uint32_t >( stream->get_position() ) );
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), ( uint8_t * )&packetSize, ( uint8_t * )&packetSize + 4 );
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream->data.begin(), stream->data.end() );
}
void RealmTCPSocket::send( const ByteStream &stream )
{
auto packetSize = htonl( stream.get_position() );
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), ( uint8_t * )&packetSize, ( uint8_t * )&packetSize + 4 );
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream.data.begin(), stream.data.end() );
}
void RealmTCPSocket::send( const sptr_generic_response response )
void RealmSocket::send( const sptr_generic_response response )
{
auto &stream = response->Serialize();
auto netSize = htonl( stream.get_position() + 4 );
auto netSize = htonl( static_cast< uint32_t >( stream.get_position() ) + 4 );
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, packetSize, true );
}
void RealmTCPSocket::send( GenericMessage &message )
void RealmSocket::send( GenericMessage &message )
{
auto &stream = message.Serialize();
auto netSize = htonl( stream.get_position() + 4 );
auto netSize = htonl( static_cast< uint32_t >( stream.get_position() ) + 4 );
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_position(), true );
}
RealmUDPSocket::RealmUDPSocket()
{
}
RealmUDPSocket::~RealmUDPSocket()
{
}
void RealmUDPSocket::send( const sptr_byte_stream stream )
{
sendto( fd, ( char * )stream->data.data(), stream->get_position(), 0, ( sockaddr * )&remote_addr, sizeof( remote_addr ) );
}
void RealmUDPSocket::send( const ByteStream &stream )
{
sendto( fd, ( char * )stream.data.data(), stream.get_position(), 0, ( sockaddr * )&remote_addr, sizeof( remote_addr ) );
}

View File

@@ -5,27 +5,25 @@
#include <memory>
#include <mutex>
// Forward Declare GenericResponse
class GenericResponse;
typedef std::shared_ptr< GenericResponse > sptr_generic_response;
// Forward Declare Generic Message
class GenericMessage;
class RealmSocket
{
private:
const size_t WRITE_BUFFER_SIZE = 65535;
public:
RealmSocket();
~RealmSocket();
virtual void send( const sptr_byte_stream stream ) = 0;
virtual void send( const ByteStream &stream ) = 0;
struct s_flag
{
bool disconnected;
bool is_listener;
bool want_more_read_data;
bool want_more_write_data;
} flag;
void send( const sptr_byte_stream stream );
void send( const sptr_generic_response response );
void send( GenericMessage &message );
// Comparison operator for sorting
bool operator<( const RealmSocket &rhs ) const
@@ -41,86 +39,32 @@ public:
SOCKET fd;
struct s_flag {
bool disconnected;
bool is_listener;
bool want_more_read_data;
bool want_more_write_data;
} flag;
sockaddr_in local_addr;
sockaddr_in remote_addr;
std::string local_ip;
int32_t local_port;
std::string remote_ip;
int32_t remote_port;
uint32_t last_write_position;
uint64_t latency;
uint64_t last_recv_time;
uint64_t last_send_time;
std::chrono::steady_clock::time_point last_recv_time;
std::chrono::steady_clock::time_point last_send_time;
std::mutex write_mutex;
std::mutex read_mutex;
std::vector< uint8_t > read_buffer;
};
class RealmTCPSocket : public RealmSocket
{
private:
const size_t WRITE_BUFFER_SIZE = 65535;
public:
RealmTCPSocket();
~RealmTCPSocket();
// Comparison operator for sorting
bool operator<( const RealmTCPSocket &rhs ) const
{
return fd < rhs.fd;
}
// Comparison operator for comparing
bool operator==( const RealmTCPSocket &rhs ) const
{
return fd == rhs.fd;
}
void send( const sptr_byte_stream stream ) override;
void send( const ByteStream &stream ) override;
void send( const sptr_generic_response response );
void send( GenericMessage &message );
public:
std::vector< uint8_t > m_pendingWriteBuffer;
std::vector< uint8_t > m_pendingReadBuffer;
};
typedef std::shared_ptr< RealmTCPSocket > sptr_tcp_socket;
class RealmUDPSocket : public RealmSocket
{
private:
const int DATAGRAM_SIZE = 1024;
public:
RealmUDPSocket();
~RealmUDPSocket();
// Comparison operator for sorting
bool operator<( const RealmUDPSocket &rhs ) const
{
return fd < rhs.fd;
}
// Comparison operator for comparing
bool operator==( const RealmUDPSocket &rhs ) const
{
return fd == rhs.fd;
}
void send( const sptr_byte_stream stream ) override;
void send( const ByteStream &stream ) override;
public:
std::queue< sptr_byte_stream > m_pendingWriteQueue;
};
typedef std::shared_ptr< RealmUDPSocket > sptr_udp_socket;
typedef std::shared_ptr< RealmSocket > sptr_socket;