TrinityCore
Loading...
Searching...
No Matches
Trinity::Net::Socket< Stream > Class Template Reference

#include <Socket.h>

+ Inheritance diagram for Trinity::Net::Socket< Stream >:

Public Member Functions

template<typename... Args>
 Socket (IoContextTcpSocket &&socket, Args &&... args)
 
template<typename... Args>
 Socket (boost::asio::io_context &context, Args &&... args)
 
 Socket (Socket const &other)=delete
 
 Socket (Socket &&other)=delete
 
Socket & operator= (Socket const &other)=delete
 
Socket & operator= (Socket &&other)=delete
 
virtual ~Socket ()
 
virtual void Start ()
 
virtual bool Update ()
 
boost::asio::ip::address const & GetRemoteIpAddress () const
 
uint16 GetRemotePort () const
 
template<SocketReadCallback Callback>
void AsyncRead (Callback &&callback)
 
void QueuePacket (MessageBuffer &&buffer)
 
bool IsOpen () const
 
void CloseSocket ()
 
void DelayedCloseSocket ()
 Marks the socket for closing after write buffer becomes empty.
 
MessageBuffer & GetReadBuffer ()
 
Stream & underlying_stream ()
 

Protected Member Functions

virtual void OnClose ()
 
virtual SocketReadCallbackResult ReadHandler ()
 
bool AsyncProcessQueue ()
 
void SetNoDelay (bool enable)
 

Private Member Functions

bool ReadHandlerInternal (boost::system::error_code const &error, size_t transferredBytes)
 
void WriteHandlerWrapper (boost::system::error_code const &)
 
bool HandleQueue ()
 

Private Attributes

Stream _socket
 
boost::asio::ip::address _remoteAddress
 
uint16 _remotePort = 0
 
MessageBuffer _readBuffer = MessageBuffer(READ_BLOCK_SIZE)
 
std::queue< MessageBuffer > _writeQueue
 
std::atomic< uint8 > _openState
 
bool _isWritingAsync = false
 

Static Private Attributes

static constexpr uint8 OpenState_Open = 0x0
 
static constexpr uint8 OpenState_Closing = 0x1
 Transition to Closed state after sending all queued data.
 
static constexpr uint8 OpenState_Closed = 0x2
 

Detailed Description

template<class Stream = IoContextTcpSocket>
class Trinity::Net::Socket< Stream >

Base async socket implementation

Template Parameters
Streamstream type used for operations on socket Stream must implement the following methods:

void close(boost::system::error_code& error);

void shutdown(boost::asio::socket_base::shutdown_type what, boost::system::error_code& shutdownError);

template<typename MutableBufferSequence, typename ReadHandlerType> void async_read_some(MutableBufferSequence const& buffers, ReadHandlerType&& handler);

template<typename ConstBufferSequence, typename WriteHandlerType> void async_write_some(ConstBufferSequence const& buffers, WriteHandlerType&& handler);

template<typename ConstBufferSequence> std::size_t write_some(ConstBufferSequence const& buffers, boost::system::error_code& error);

template<typename WaitHandlerType> void async_wait(boost::asio::socket_base::wait_type type, WaitHandlerType&& handler);

template<typename SettableSocketOption> void set_option(SettableSocketOption const& option, boost::system::error_code& error);

tcp::socket::endpoint_type remote_endpoint() const;

Definition at line 109 of file Socket.h.

Constructor & Destructor Documentation

◆ Socket() [1/4]

template<class Stream = IoContextTcpSocket>
template<typename... Args>
Trinity::Net::Socket< Stream >::Socket ( IoContextTcpSocket< Stream > &&  socket,
Args &&...  args 
)
inlineexplicit

Definition at line 113 of file Socket.h.

◆ Socket() [2/4]

template<class Stream = IoContextTcpSocket>
template<typename... Args>
Trinity::Net::Socket< Stream >::Socket ( boost::asio::io_context &  context,
Args &&...  args 
)
inlineexplicit

Definition at line 119 of file Socket.h.

◆ Socket() [3/4]

template<class Stream = IoContextTcpSocket>
Trinity::Net::Socket< Stream >::Socket ( Socket< Stream > const &  other)
delete

◆ Socket() [4/4]

template<class Stream = IoContextTcpSocket>
Trinity::Net::Socket< Stream >::Socket ( Socket< Stream > &&  other)
delete

◆ ~Socket()

template<class Stream = IoContextTcpSocket>
virtual Trinity::Net::Socket< Stream >::~Socket ( )
inlinevirtual

Member Function Documentation

◆ AsyncProcessQueue()

◆ AsyncRead()

template<class Stream = IoContextTcpSocket>
template<SocketReadCallback Callback>
void Trinity::Net::Socket< Stream >::AsyncRead ( Callback &&  callback)
inline

◆ CloseSocket()

◆ DelayedCloseSocket()

template<class Stream = IoContextTcpSocket>
void Trinity::Net::Socket< Stream >::DelayedCloseSocket ( )
inline

◆ GetReadBuffer()

◆ GetRemoteIpAddress()

◆ GetRemotePort()

template<class Stream = IoContextTcpSocket>
uint16 Trinity::Net::Socket< Stream >::GetRemotePort ( ) const
inline

◆ HandleQueue()

◆ IsOpen()

◆ OnClose()

template<class Stream = IoContextTcpSocket>
virtual void Trinity::Net::Socket< Stream >::OnClose ( )
inlineprotectedvirtual

Reimplemented in WorldSocket.

Definition at line 223 of file Socket.h.

Referenced by Trinity::Net::Socket< Stream >::CloseSocket().

◆ operator=() [1/2]

template<class Stream = IoContextTcpSocket>
Socket & Trinity::Net::Socket< Stream >::operator= ( Socket< Stream > &&  other)
delete

◆ operator=() [2/2]

template<class Stream = IoContextTcpSocket>
Socket & Trinity::Net::Socket< Stream >::operator= ( Socket< Stream > const &  other)
delete

◆ QueuePacket()

template<class Stream = IoContextTcpSocket>
void Trinity::Net::Socket< Stream >::QueuePacket ( MessageBuffer &&  buffer)
inline

◆ ReadHandler()

template<class Stream = IoContextTcpSocket>
virtual SocketReadCallbackResult Trinity::Net::Socket< Stream >::ReadHandler ( )
inlineprotectedvirtual

Reimplemented in AuthSession, and WorldSocket.

Definition at line 225 of file Socket.h.

References Trinity::Net::KeepReading.

Referenced by Trinity::Net::InvokeReadHandlerCallback< SocketType >::operator()().

◆ ReadHandlerInternal()

template<class Stream = IoContextTcpSocket>
bool Trinity::Net::Socket< Stream >::ReadHandlerInternal ( boost::system::error_code const &  error,
size_t  transferredBytes 
)
inlineprivate

◆ SetNoDelay()

template<class Stream = IoContextTcpSocket>
void Trinity::Net::Socket< Stream >::SetNoDelay ( bool  enable)
inlineprotected

◆ Start()

template<class Stream = IoContextTcpSocket>
virtual void Trinity::Net::Socket< Stream >::Start ( )
inlinevirtual

Reimplemented in AuthSession, and WorldSocket.

Definition at line 135 of file Socket.h.

◆ underlying_stream()

template<class Stream = IoContextTcpSocket>
Stream & Trinity::Net::Socket< Stream >::underlying_stream ( )
inline

Definition at line 217 of file Socket.h.

References Trinity::Net::Socket< Stream >::_socket.

◆ Update()

◆ WriteHandlerWrapper()

template<class Stream = IoContextTcpSocket>
void Trinity::Net::Socket< Stream >::WriteHandlerWrapper ( boost::system::error_code const &  )
inlineprivate

Member Data Documentation

◆ _isWritingAsync

template<class Stream = IoContextTcpSocket>
bool Trinity::Net::Socket< Stream >::_isWritingAsync = false
private

◆ _openState

◆ _readBuffer

◆ _remoteAddress

template<class Stream = IoContextTcpSocket>
boost::asio::ip::address Trinity::Net::Socket< Stream >::_remoteAddress
private

Definition at line 347 of file Socket.h.

Referenced by Trinity::Net::Socket< Stream >::GetRemoteIpAddress().

◆ _remotePort

template<class Stream = IoContextTcpSocket>
uint16 Trinity::Net::Socket< Stream >::_remotePort = 0
private

Definition at line 348 of file Socket.h.

Referenced by Trinity::Net::Socket< Stream >::GetRemotePort().

◆ _socket

◆ _writeQueue

◆ OpenState_Closed

template<class Stream = IoContextTcpSocket>
constexpr uint8 Trinity::Net::Socket< Stream >::OpenState_Closed = 0x2
staticconstexprprivate

◆ OpenState_Closing

template<class Stream = IoContextTcpSocket>
constexpr uint8 Trinity::Net::Socket< Stream >::OpenState_Closing = 0x1
staticconstexprprivate

Transition to Closed state after sending all queued data.

Definition at line 355 of file Socket.h.

Referenced by Trinity::Net::Socket< Stream >::DelayedCloseSocket(), and Trinity::Net::Socket< Stream >::HandleQueue().

◆ OpenState_Open

template<class Stream = IoContextTcpSocket>
constexpr uint8 Trinity::Net::Socket< Stream >::OpenState_Open = 0x0
staticconstexprprivate

The documentation for this class was generated from the following file: