We didn't need a UDP socket after all
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
#include "../global_define.h"
|
#include "../global_define.h"
|
||||||
|
|
||||||
RealmSocket::RealmSocket()
|
RealmSocket::RealmSocket()
|
||||||
@@ -8,9 +7,6 @@ RealmSocket::RealmSocket()
|
|||||||
memset( &local_addr, 0, sizeof( local_addr ) );
|
memset( &local_addr, 0, sizeof( local_addr ) );
|
||||||
memset( &remote_addr, 0, sizeof( remote_addr ) );
|
memset( &remote_addr, 0, sizeof( remote_addr ) );
|
||||||
|
|
||||||
local_ip = "";
|
|
||||||
local_port = 0;
|
|
||||||
|
|
||||||
remote_ip = "";
|
remote_ip = "";
|
||||||
remote_port = 0;
|
remote_port = 0;
|
||||||
|
|
||||||
@@ -21,9 +17,10 @@ RealmSocket::RealmSocket()
|
|||||||
|
|
||||||
last_write_position = 0;
|
last_write_position = 0;
|
||||||
|
|
||||||
|
last_recv_time = std::chrono::steady_clock::now();
|
||||||
|
last_send_time = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
latency = 0;
|
latency = 0;
|
||||||
last_recv_time = 0;
|
|
||||||
last_send_time = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RealmSocket::~RealmSocket()
|
RealmSocket::~RealmSocket()
|
||||||
@@ -38,9 +35,6 @@ RealmSocket::~RealmSocket()
|
|||||||
memset( &local_addr, 0, sizeof( local_addr ) );
|
memset( &local_addr, 0, sizeof( local_addr ) );
|
||||||
memset( &remote_addr, 0, sizeof( remote_addr ) );
|
memset( &remote_addr, 0, sizeof( remote_addr ) );
|
||||||
|
|
||||||
local_ip = "";
|
|
||||||
local_port = 0;
|
|
||||||
|
|
||||||
remote_ip = "";
|
remote_ip = "";
|
||||||
remote_port = 0;
|
remote_port = 0;
|
||||||
|
|
||||||
@@ -52,72 +46,33 @@ RealmSocket::~RealmSocket()
|
|||||||
last_write_position = 0;
|
last_write_position = 0;
|
||||||
|
|
||||||
latency = 0;
|
latency = 0;
|
||||||
last_recv_time = 0;
|
|
||||||
last_send_time = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
RealmTCPSocket::RealmTCPSocket()
|
|
||||||
{
|
|
||||||
m_pendingWriteBuffer.reserve( WRITE_BUFFER_SIZE );
|
m_pendingWriteBuffer.reserve( WRITE_BUFFER_SIZE );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RealmTCPSocket::~RealmTCPSocket()
|
void RealmSocket::send( const sptr_byte_stream stream )
|
||||||
{
|
{
|
||||||
|
auto packetSize = htonl( static_cast< uint32_t >( stream->get_position() ) );
|
||||||
}
|
|
||||||
|
|
||||||
void RealmTCPSocket::send( const sptr_byte_stream 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(), ( uint8_t * )&packetSize, ( uint8_t * )&packetSize + 4 );
|
||||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream->data.begin(), stream->data.end() );
|
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream->data.begin(), stream->data.end() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void RealmTCPSocket::send( const ByteStream &stream )
|
void RealmSocket::send( const sptr_generic_response response )
|
||||||
{
|
|
||||||
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 )
|
|
||||||
{
|
{
|
||||||
auto &stream = response->Serialize();
|
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(), ( uint8_t * )&netSize, ( uint8_t * )&netSize + 4 );
|
||||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream.data.begin(), stream.data.end() );
|
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 &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(), ( uint8_t * )&netSize, ( uint8_t * )&netSize + 4 );
|
||||||
m_pendingWriteBuffer.insert( m_pendingWriteBuffer.end(), stream.data.begin(), stream.data.end() );
|
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 <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
|
// Forward Declare GenericResponse
|
||||||
class GenericResponse;
|
class GenericResponse;
|
||||||
typedef std::shared_ptr< GenericResponse > sptr_generic_response;
|
typedef std::shared_ptr< GenericResponse > sptr_generic_response;
|
||||||
|
|
||||||
|
// Forward Declare Generic Message
|
||||||
class GenericMessage;
|
class GenericMessage;
|
||||||
|
|
||||||
class RealmSocket
|
class RealmSocket
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
const size_t WRITE_BUFFER_SIZE = 65535;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RealmSocket();
|
RealmSocket();
|
||||||
~RealmSocket();
|
~RealmSocket();
|
||||||
|
|
||||||
virtual void send( const sptr_byte_stream stream ) = 0;
|
void send( const sptr_byte_stream stream );
|
||||||
virtual void send( const ByteStream &stream ) = 0;
|
void send( const sptr_generic_response response );
|
||||||
|
void send( GenericMessage &message );
|
||||||
struct s_flag
|
|
||||||
{
|
|
||||||
bool disconnected;
|
|
||||||
bool is_listener;
|
|
||||||
bool want_more_read_data;
|
|
||||||
bool want_more_write_data;
|
|
||||||
} flag;
|
|
||||||
|
|
||||||
// Comparison operator for sorting
|
// Comparison operator for sorting
|
||||||
bool operator<( const RealmSocket &rhs ) const
|
bool operator<( const RealmSocket &rhs ) const
|
||||||
@@ -41,86 +39,32 @@ public:
|
|||||||
|
|
||||||
SOCKET fd;
|
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 local_addr;
|
||||||
sockaddr_in remote_addr;
|
sockaddr_in remote_addr;
|
||||||
|
|
||||||
std::string local_ip;
|
|
||||||
int32_t local_port;
|
|
||||||
|
|
||||||
std::string remote_ip;
|
std::string remote_ip;
|
||||||
int32_t remote_port;
|
int32_t remote_port;
|
||||||
|
|
||||||
uint32_t last_write_position;
|
uint32_t last_write_position;
|
||||||
|
|
||||||
uint64_t latency;
|
uint64_t latency;
|
||||||
uint64_t last_recv_time;
|
std::chrono::steady_clock::time_point last_recv_time;
|
||||||
uint64_t last_send_time;
|
std::chrono::steady_clock::time_point last_send_time;
|
||||||
|
|
||||||
std::mutex write_mutex;
|
std::mutex write_mutex;
|
||||||
std::mutex read_mutex;
|
std::mutex read_mutex;
|
||||||
|
|
||||||
std::vector< uint8_t > read_buffer;
|
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_pendingWriteBuffer;
|
||||||
std::vector< uint8_t > m_pendingReadBuffer;
|
std::vector< uint8_t > m_pendingReadBuffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::shared_ptr< RealmTCPSocket > sptr_tcp_socket;
|
typedef std::shared_ptr< RealmSocket > sptr_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;
|
|
||||||
|
|||||||
Reference in New Issue
Block a user