eris  1.4.0
A WorldForge client library.
Eris::Connection Class Reference
Inheritance diagram for Eris::Connection:
Collaboration diagram for Eris::Connection:

Public Types

enum  Status {
  INVALID_STATUS = 0, NEGOTIATE, CONNECTING, CONNECTED,
  DISCONNECTED, DISCONNECTING, QUERY_GET
}
 possible states for the connection More...
 

Public Member Functions

 Connection (boost::asio::io_service &io_service, EventService &eventService, std::string clientName, const std::string &host, short port)
 Create an unconnected instance. More...
 
 Connection (boost::asio::io_service &io_service, EventService &eventService, std::string clientName, std::string socket)
 
int connect ()
 
int disconnect ()
 Initiate disconnection from the server. More...
 
TypeServicegetTypeService () const
 
ResponseTrackergetResponder () const
 
EventServicegetEventService ()
 
virtual void send (const Atlas::Objects::Root &obj)
 Transmit an Atlas::Objects instance to the server. More...
 
void setDefaultRouter (Router *router)
 
void clearDefaultRouter ()
 
void registerRouterForTo (Router *router, const std::string &toId)
 
void unregisterRouterForTo (Router *router, const std::string &toId)
 
void registerRouterForFrom (Router *router, const std::string &fromId)
 
void unregisterRouterForFrom (const std::string &fromId)
 
void lock ()
 
void unlock ()
 
void refreshServerInfo ()
 
void getServerInfo (ServerInfo &) const
 
virtual int connectRemote (const std::string &host, short port)
 
virtual int connectLocal (const std::string &socket)
 
Status getStatus () const
 get the current status of the connection More...
 
bool isConnected () const
 Ascertain whether or not the connection is usable for transport. More...
 
const std::string & getHost () const
 
short getPort () const
 
Atlas::Objects::Factories & getFactories ()
 
const Atlas::Objects::Factories & getFactories () const
 

Public Attributes

sigc::signal< void > GotServerInfo
 
sigc::signal< bool > Disconnecting
 
sigc::signal< void, const std::string & > Failure
 
sigc::signal< void, StatusStatusChanged
 indicates a status change on the connection More...
 
sigc::signal< void > Connected
 sent on successful negotiation of a game server connection More...
 
sigc::signal< void > Disconnected
 final disconnect (or hard disocnnect) notifcation More...
 

Protected Types

typedef std::deque< Atlas::Objects::Operation::RootOperation > OpDeque
 
typedef std::unordered_map< std::string, Router * > IdRouterMap
 

Protected Member Functions

void setStatus (Status sc) override
 
void handleFailure (const std::string &msg) override
 Process failures (to track when reconnection should be permitted) More...
 
void handleTimeout (const std::string &msg) override
 
void onConnect () override
 derived-class notification when connection and negotiation is completed More...
 
virtual void objectArrived (Atlas::Objects::Root obj)
 
void postForDispatch (const Atlas::Objects::Root &obj)
 
void cleanupRedispatch (Redispatch *r)
 
void dispatch () override
 
void dispatchOp (const Atlas::Objects::Operation::RootOperation &op)
 
void handleServerInfo (const Atlas::Objects::Operation::RootOperation &op)
 
void onDisconnectTimeout ()
 
void stateChanged (StreamSocket::Status status)
 
void onConnectTimeout ()
 
void onNegotiateTimeout ()
 
void hardDisconnect (bool emit)
 

Protected Attributes

std::unique_ptr< ConnectionDecoderm_decoder
 
EventService_eventService
 
const std::string _host
 
const short _port
 port of the server More...
 
const std::string _localSocket
 
OpDeque m_opDeque
 store of all the received ops waiting to be dispatched More...
 
std::unique_ptr< TypeServicem_typeService
 
Routerm_defaultRouter
 
IdRouterMap m_toRouters
 
IdRouterMap m_fromRouters
 
int m_lock
 
std::vector< std::unique_ptr< Redispatch > > m_finishedRedispatches
 
ServerInfo m_info
 
std::unique_ptr< ResponseTrackerm_responder
 
boost::asio::io_service & _io_service
 
std::unique_ptr< Atlas::Objects::Factories > _factories
 
std::shared_ptr< StreamSocket_socket
 
Status _status
 current status of the connection More...
 
const std::string _id
 a unique identifier for this connection More...
 
std::string _clientName
 the client identified used during connection More...
 
Atlas::Bridge * _bridge
 

Friends

struct ConnectionDecoder
 
class Redispatch
 
class TestInjector
 

Detailed Description

Definition at line 44 of file Connection.h.

Member Enumeration Documentation

◆ Status

possible states for the connection

Enumerator
INVALID_STATUS 

indicates an illegal state

NEGOTIATE 

Atlas negotiation in progress.

CONNECTING 

stream / socket connection in progress

CONNECTED 

connection fully established

DISCONNECTED 

finished disconnection

DISCONNECTING 

clean disconnection in progress

QUERY_GET 

meta-query performing GET operation

Definition at line 55 of file BaseConnection.h.

Constructor & Destructor Documentation

◆ Connection() [1/2]

Eris::Connection::Connection ( boost::asio::io_service &  io_service,
EventService eventService,
std::string  clientName,
const std::string &  host,
short  port 
)

Create an unconnected instance.

Create a new connection, with the client-name string specified. The client-name is sent during Atlas negotiation of the connection.

Parameters
debugPerform extra (slower) validation on the connection

Definition at line 48 of file Connection.cpp.

◆ Connection() [2/2]

Eris::Connection::Connection ( boost::asio::io_service &  io_service,
EventService eventService,
std::string  clientName,
std::string  socket 
)

Create a new connection, with the client-name string specified. The client-name is sent during Atlas negotiation of the connection.

Parameters
debugPerform extra (slower) validation on the connection

Definition at line 66 of file Connection.cpp.

Member Function Documentation

◆ connect()

int Eris::Connection::connect ( )

If the underlying socket cannot be opened, connect will return an error number immediately. Providing the basic connection is established, other failures will be reported via the Failure signal.

Definition at line 96 of file Connection.cpp.

References _port, Eris::BaseConnection::connectLocal(), and Eris::BaseConnection::connectRemote().

◆ connectLocal()

int Eris::BaseConnection::connectLocal ( const std::string &  socket)
virtualinherited

◆ connectRemote()

int Eris::BaseConnection::connectRemote ( const std::string &  host,
short  port 
)
virtualinherited

◆ disconnect()

◆ getHost()

const std::string & Eris::BaseConnection::getHost ( ) const
inherited

Gets the host of the connection.

Returns
The host of the connection.

Definition at line 203 of file BaseConnection.cpp.

References Eris::BaseConnection::_host.

◆ getPort()

short Eris::BaseConnection::getPort ( ) const
inherited

Gets the port of the connection.

Returns
The port of the connection.

Definition at line 208 of file BaseConnection.cpp.

References Eris::BaseConnection::_port.

◆ getServerInfo()

void Eris::Connection::getServerInfo ( ServerInfo si) const

Retrive the current server information. Check the status field of the returned object before using this data, since it may be out of date or invalid.

Definition at line 242 of file Connection.cpp.

◆ getStatus()

Status Eris::BaseConnection::getStatus ( ) const
inlineinherited

get the current status of the connection

Definition at line 68 of file BaseConnection.h.

References Eris::BaseConnection::_status.

◆ handleFailure()

void Eris::Connection::handleFailure ( const std::string &  msg)
overrideprotectedvirtual

Process failures (to track when reconnection should be permitted)

Implements Eris::BaseConnection.

Definition at line 336 of file Connection.cpp.

References Failure.

Referenced by send().

◆ hardDisconnect()

void Eris::BaseConnection::hardDisconnect ( bool  emit)
protectedinherited

performs and instant disconnection from the server @emit specified whether the change of state should be signalled

Definition at line 162 of file BaseConnection.cpp.

References Eris::BaseConnection::_status, Eris::BaseConnection::DISCONNECTED, Eris::BaseConnection::Disconnected, and Eris::BaseConnection::setStatus().

Referenced by Eris::BaseConnection::connectLocal(), Eris::BaseConnection::connectRemote(), disconnect(), send(), unlock(), and Eris::BaseConnection::~BaseConnection().

◆ isConnected()

◆ lock()

void Eris::Connection::lock ( )

Lock then connection's state. This prevents the connection changing status until a corresponding unlock() call is issued. The only use at present is to hold the connection in the 'DISCONNECTING' state while other objects clean up and so on. In the future locking may also be applicable to other states.

Definition at line 217 of file Connection.cpp.

Referenced by Eris::Account::netDisconnecting().

◆ onConnect()

void Eris::Connection::onConnect ( )
overrideprotectedvirtual

derived-class notification when connection and negotiation is completed

Reimplemented from Eris::BaseConnection.

Definition at line 359 of file Connection.cpp.

References Eris::BaseConnection::onConnect().

◆ postForDispatch()

void Eris::Connection::postForDispatch ( const Atlas::Objects::Root &  obj)
protected

Inject a local operation into the dispatch queue. Used by the redispatch mechanism.

Definition at line 370 of file Connection.cpp.

References m_opDeque.

◆ refreshServerInfo()

void Eris::Connection::refreshServerInfo ( )

Update the information stored about the current server. While the refresh is taking place, the current info is still available, but with it's status set to QUERYING. The signal GotServerInfo will be emitted once the new data is received.

Definition at line 246 of file Connection.cpp.

References Eris::BaseConnection::_status, Eris::BaseConnection::CONNECTED, Eris::getNewSerialno(), and send().

◆ send()

◆ setStatus()

void Eris::Connection::setStatus ( Status  sc)
overrideprotectedvirtual

update the connection status (and emit the appropriate signal)

Parameters
scThe new status of the connection

Reimplemented from Eris::BaseConnection.

Definition at line 331 of file Connection.cpp.

References Eris::BaseConnection::_status, and StatusChanged.

Referenced by disconnect().

◆ unlock()

void Eris::Connection::unlock ( )

Unlock the connection (permit status change). See Connection::lock for more information about status locking.

Definition at line 221 of file Connection.cpp.

References Eris::BaseConnection::_status, Eris::BaseConnection::DISCONNECTING, Eris::BaseConnection::hardDisconnect(), and m_opDeque.

Member Data Documentation

◆ _bridge

Atlas::Bridge* Eris::BaseConnection::_bridge
protectedinherited

the connection bridge (i.e something implementing objectArrived()) : this can be the derived class itself, or any other object

Definition at line 139 of file BaseConnection.h.

Referenced by Eris::BaseConnection::connectLocal(), and Eris::BaseConnection::connectRemote().

◆ _clientName

std::string Eris::BaseConnection::_clientName
protectedinherited

the client identified used during connection

Definition at line 135 of file BaseConnection.h.

Referenced by Eris::BaseConnection::connectLocal(), and Eris::BaseConnection::connectRemote().

◆ _id

const std::string Eris::BaseConnection::_id
protectedinherited

a unique identifier for this connection

Definition at line 133 of file BaseConnection.h.

◆ _port

const short Eris::Connection::_port
protected

port of the server

Definition at line 169 of file Connection.h.

Referenced by connect().

◆ _status

◆ Connected

sigc::signal<void> Eris::BaseConnection::Connected
inherited

sent on successful negotiation of a game server connection

Definition at line 95 of file BaseConnection.h.

Referenced by Eris::Account::Account(), and Eris::BaseConnection::onConnect().

◆ Disconnected

sigc::signal<void> Eris::BaseConnection::Disconnected
inherited

final disconnect (or hard disocnnect) notifcation

Definition at line 98 of file BaseConnection.h.

Referenced by Eris::BaseConnection::hardDisconnect().

◆ Disconnecting

sigc::signal<bool> Eris::Connection::Disconnecting

Emitted when the disconnection process is initiated. The argument is a flag indicating if the disconnection was clean or not.

Definition at line 134 of file Connection.h.

Referenced by disconnect().

◆ Failure

sigc::signal<void, const std::string&> Eris::Connection::Failure

Emitted when a non-fatal error occurs. Tthese are nearly always network related, such as connections being lost, or host names not found. The connection will be placed into the DISCONNECTED state after the signal is emitted; thus the current state (when the failure occured) is still valid during the callback

Definition at line 142 of file Connection.h.

Referenced by Eris::Account::Account(), and handleFailure().

◆ m_opDeque

OpDeque Eris::Connection::m_opDeque
protected

store of all the received ops waiting to be dispatched

Definition at line 191 of file Connection.h.

Referenced by postForDispatch(), and unlock().

◆ StatusChanged

sigc::signal<void, Status> Eris::Connection::StatusChanged

indicates a status change on the connection

emitted when the connection status changes; This will often correspond to the emission of a more specific signal (such as Connected), which should be used where available.

Definition at line 148 of file Connection.h.

Referenced by setStatus().


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