mirror of
https://github.com/HikikoMarmy/Champions-Reborn-Server.git
synced 2026-04-05 08:59:54 -03:00
We didn't need a UDP socket after all
This commit is contained in:
@@ -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 ) );
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user