eris  1.4.0
A WorldForge client library.
Eris::AsioStreamSocket< ProtocolT > Class Template Reference

Template specialization which uses boost::asio sockets. More...

#include <StreamSocket.h>

Inheritance diagram for Eris::AsioStreamSocket< ProtocolT >:
Collaboration diagram for Eris::AsioStreamSocket< ProtocolT >:

Public Types

enum  Status {
  INVALID_STATUS = 0, CONNECTING, CONNECTING_TIMEOUT, CONNECTING_FAILED,
  NEGOTIATE, NEGOTIATE_TIMEOUT, NEGOTIATE_FAILED, CONNECTED,
  CONNECTION_FAILED, DISCONNECTED, DISCONNECTING
}
 

Public Member Functions

 AsioStreamSocket (boost::asio::io_service &io_service, const std::string &client_name, Atlas::Bridge &bridge, StreamSocket::Callbacks callbacks)
 
void connect (const typename ProtocolT::endpoint &endpoint)
 
void write () override
 Send any unsent data. More...
 
ProtocolT::socket & getAsioSocket ()
 
void detach ()
 Detaches the callbacks. More...
 
Atlas::Codec & getCodec ()
 Gets the codec object. More...
 
Atlas::Objects::ObjectsEncoder & getEncoder ()
 Gets the encoder object. More...
 

Protected Types

enum  { read_buffer_size = 2048 }
 

Protected Member Functions

void negotiate_read () override
 
void negotiate_write ()
 
void do_read () override
 
void startNegotiation ()
 
Atlas::Negotiate::State negotiate ()
 

Protected Attributes

ProtocolT::socket m_socket
 
boost::asio::io_service & m_io_service
 
Atlas::Bridge & _bridge
 
Callbacks _callbacks
 
std::unique_ptr< boost::asio::streambuf > mWriteBuffer
 
std::unique_ptr< boost::asio::streambuf > mSendBuffer
 
boost::asio::streambuf mReadBuffer
 
std::istream mInStream
 
std::ostream mOutStream
 
bool mShouldSend
 
bool mIsSending
 
std::unique_ptr< Atlas::Net::StreamConnect > _sc
 negotiation object (nullptr after connection!) More...
 
boost::asio::steady_timer _negotiateTimer
 
boost::asio::steady_timer _connectTimer
 
std::unique_ptr< Atlas::Codec > m_codec
 
std::unique_ptr< Atlas::Objects::ObjectsEncoder > m_encoder
 
bool m_is_connected
 

Detailed Description

template<typename ProtocolT>
class Eris::AsioStreamSocket< ProtocolT >

Template specialization which uses boost::asio sockets.

Definition at line 184 of file StreamSocket.h.

Member Enumeration Documentation

◆ Status

Enumerator
INVALID_STATUS 

indicates an illegal state

CONNECTING 

stream / socket connection in progress

CONNECTING_TIMEOUT 

timeout when trying to establish a connection

CONNECTING_FAILED 

failure when trying to establish a connection

NEGOTIATE 

Atlas negotiation in progress.

NEGOTIATE_TIMEOUT 

timeout when negotiating

NEGOTIATE_FAILED 

failure when negotiating

CONNECTED 

connection fully established

CONNECTION_FAILED 

connection failed

DISCONNECTED 

finished disconnection

DISCONNECTING 

clean disconnection in progress

Definition at line 58 of file StreamSocket.h.

Member Function Documentation

◆ detach()

void Eris::StreamSocket::detach ( )
inherited

Detaches the callbacks.

Call this when the owner instance is destroyed, or you otherwise don't want any callbacks.

Definition at line 58 of file StreamSocket.cpp.

◆ getCodec()

Atlas::Codec & Eris::StreamSocket::getCodec ( )
inherited

Gets the codec object.

Note
Only call this after the socket has successfully negotiated.
Returns

Definition at line 123 of file StreamSocket.cpp.

◆ getEncoder()

Atlas::Objects::ObjectsEncoder & Eris::StreamSocket::getEncoder ( )
inherited

Gets the encoder object.

Note
Only call this after the socket has successfully negotiated.
Returns

Definition at line 128 of file StreamSocket.cpp.

◆ write()

Member Data Documentation

◆ _sc

std::unique_ptr<Atlas::Net::StreamConnect> Eris::StreamSocket::_sc
protectedinherited

negotiation object (nullptr after connection!)

Definition at line 166 of file StreamSocket.h.

◆ mInStream

std::istream Eris::StreamSocket::mInStream
protectedinherited

Stream for data being received.

Definition at line 149 of file StreamSocket.h.

◆ mIsSending

bool Eris::StreamSocket::mIsSending
protectedinherited

True if we're currently sending through an async_write (and thus shouldn't touch mSendBuffer).

Definition at line 164 of file StreamSocket.h.

Referenced by Eris::AsioStreamSocket< ProtocolT >::write().

◆ mOutStream

std::ostream Eris::StreamSocket::mOutStream
protectedinherited

Stream for data being sent out.

Definition at line 154 of file StreamSocket.h.

Referenced by Eris::AsioStreamSocket< ProtocolT >::write().

◆ mReadBuffer

boost::asio::streambuf Eris::StreamSocket::mReadBuffer
protectedinherited

Buffer for data being read from the socket.

Definition at line 144 of file StreamSocket.h.

◆ mSendBuffer

std::unique_ptr<boost::asio::streambuf> Eris::StreamSocket::mSendBuffer
protectedinherited

Buffer of data which is being sent. This should not be touched until the async_write call completes.

Definition at line 139 of file StreamSocket.h.

Referenced by Eris::AsioStreamSocket< ProtocolT >::write().

◆ mShouldSend

bool Eris::StreamSocket::mShouldSend
protectedinherited

True if we should send again as soon as an ongoing async_write operation completes.

Definition at line 159 of file StreamSocket.h.

Referenced by Eris::AsioStreamSocket< ProtocolT >::write().

◆ mWriteBuffer

std::unique_ptr<boost::asio::streambuf> Eris::StreamSocket::mWriteBuffer
protectedinherited

Buffer used to write data to be sent. Swapped with mSendBuffer once data is being sent.

Definition at line 133 of file StreamSocket.h.

Referenced by Eris::AsioStreamSocket< ProtocolT >::write().


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