1 #ifndef ERIS_CONNECTION_H
2 #define ERIS_CONNECTION_H
4 #include <Eris/BaseConnection.h>
5 #include <Eris/ServerInfo.h>
7 #include <Atlas/Objects/Decoder.h>
8 #include <Atlas/Objects/ObjectsFwd.h>
9 #include <Atlas/Objects/RootOperation.h>
19 class basic_socket_stream;
30 class ResponseTracker;
39 public Atlas::Objects::ObjectsDecoder
47 Connection(
const std::string &cnm,
const std::string& host,
short port,
bool debug);
53 Connection(
const std::string &cnm,
const std::string& socket,
bool debug);
66 {
return m_typeService.get(); }
69 {
return m_responder.get(); }
75 virtual void send(
const Atlas::Objects::Root &obj);
77 void setDefaultRouter(
Router* router);
79 void clearDefaultRouter();
81 void registerRouterForTo(
Router* router,
const std::string toId);
82 void unregisterRouterForTo(
Router* router,
const std::string toId);
84 void registerRouterForFrom(
Router* router,
const std::string fromId);
85 void unregisterRouterForFrom(
Router* router,
const std::string fromId);
112 sigc::signal<void> GotServerInfo;
127 sigc::signal<void, const std::string&>
Failure;
143 virtual void handleTimeout(
const std::string& msg);
147 void objectArrived(
const Atlas::Objects::Root& obj);
149 const std::string _host;
152 const std::string _socket;
155 friend class TestInjector;
165 void dispatchOp(
const Atlas::Objects::Operation::RootOperation& op);
166 void handleServerInfo(
const Atlas::Objects::Operation::RootOperation& op);
168 void onDisconnectTimeout();
170 typedef std::deque<Atlas::Objects::Operation::RootOperation> OpDeque;
173 std::unique_ptr<TypeService> m_typeService;
176 typedef std::map<std::string, Router*> IdRouterMap;
177 IdRouterMap m_toRouters;
178 IdRouterMap m_fromRouters;
182 Atlas::Objects::ObjectsEncoder* m_debugRecvEncoder;
184 std::vector<Redispatch*> m_finishedRedispatches;
187 std::unique_ptr<ResponseTracker> m_responder;
191 long getNewSerialno();
virtual void setStatus(Status sc)
update the connection status (and emit the appropriate signal)
Definition: Connection.cpp:321
sigc::signal< void, Status > StatusChanged
indicates a status change on the connection
Definition: Connection.h:133
void hardDisconnect(bool emit)
performs and instant disconnection from the server @emit specified whether the change of state should...
Definition: BaseConnection.cpp:159
Timeout
Definition: Timeout.h:13
sigc::signal< void, const std::string & > Failure
Emitted when a non-fatal error occurs.
Definition: Connection.h:127
virtual void onConnect()
derived-class notification when connection and negotiation is completed
Definition: BaseConnection.cpp:309
stream_socket_stream * _stream
the underlying iostream channel
Definition: BaseConnection.h:133
void postForDispatch(const Atlas::Objects::Root &obj)
Inject a local operation into the dispatch queue.
Definition: Connection.cpp:364
Status _status
current status of the connection
Definition: BaseConnection.h:130
const short _port
port of the server
Definition: Connection.h:150
Connection(const std::string &cnm, const std::string &host, short port, bool debug)
Create an unconnected instance.
Definition: Connection.cpp:38
A service class querying and caching types.
Definition: TypeService.h:25
@ DISCONNECTED
finished disconnection
Definition: BaseConnection.h:53
abstract interface for objects that can route Atlas data.
Definition: Router.h:11
Definition: LogStream.h:56
void processServer(const Atlas::Objects::Entity::RootEntity &svr)
called by Meta when info is received from the server, sets status to valid.
Definition: ServerInfo.cpp:40
void recv()
perform a blocking read from the underlying socket
Definition: BaseConnection.cpp:205
OpDeque m_opDeque
store of all the recived ops waiting to be dispatched
Definition: Connection.h:171
int connect()
If the underlying socket cannot be opened, connect will return an error number immediately.
Definition: Connection.cpp:74
Atlas::Objects::ObjectsEncoder * _encode
the objects encoder, bound to _codec
Definition: BaseConnection.h:126
void getServerInfo(ServerInfo &) const
Retrive the current server information.
Definition: Connection.cpp:239
Definition: Redispatch.h:16
Definition: Exceptions.h:29
void unlock()
Unlock the connection (permit status change).
Definition: Connection.cpp:217
@ DISCONNECTING
clean disconnection in progress
Definition: BaseConnection.h:54
sigc::signal< bool > Disconnecting
Emitted when the disconnection process is initiated.
Definition: Connection.h:119
@ CONNECTED
connection fully established
Definition: BaseConnection.h:52
virtual void handleFailure(const std::string &msg)
Process failures (to track when reconnection should be permitted)
Definition: Connection.cpp:327
Underlying Atlas connection, providing a send interface, and receive (dispatch) system.
Definition: BaseConnection.h:33
Timeout * _timeout
network level timeouts
Definition: BaseConnection.h:142
virtual void send(const Atlas::Objects::Root &obj)
Transmit an Atlas::Objects instance to the server.
Definition: Connection.cpp:147
int disconnect()
Initiate disconnection from the server.
Definition: Connection.cpp:83
Definition: LogStream.h:36
Information about a specific game server, retrieved via the Meta-server and anonymous GETs.
Definition: ServerInfo.h:22
virtual void onConnect()
derived-class notification when connection and negotiation is completed
Definition: Connection.cpp:351
Definition: LogStream.h:46
sigc::signal< void > Expired
The timeout signal.
Definition: Timeout.h:50
Underlying Atlas connection, providing a send interface, and receive (dispatch) system.
Definition: Connection.h:40
void refreshServerInfo()
Update the information stored about the current server.
Definition: Connection.cpp:244
void lock()
Lock then connection's state.
Definition: Connection.cpp:212
virtual int connectLocal(const std::string &socket)
Try to connect to a local socket.
Definition: BaseConnection.cpp:118
Status
possible states for the connection
Definition: BaseConnection.h:48
Definition: Response.h:60
virtual int connect(const std::string &host, short port)
open a connection to the specified host/port; invokes the failure handler if the connection could not...
Definition: BaseConnection.cpp:82