Eris  1.3.23
Connection.h
1 #ifndef ERIS_CONNECTION_H
2 #define ERIS_CONNECTION_H
3 
4 #include <Eris/BaseConnection.h>
5 #include <Eris/ServerInfo.h>
6 
7 #include <Atlas/Objects/Decoder.h>
8 #include <Atlas/Objects/ObjectsFwd.h>
9 #include <Atlas/Objects/RootOperation.h>
10 
11 #include <deque>
12 #include <map>
13 #include <memory>
14 
18 // Forward declaration of the skstream type
19 class basic_socket_stream;
20 
21 namespace Eris
22 {
23 
24 // Forward declarations
25 class Timeout;
26 class PollData;
27 class TypeService;
28 class Router;
29 class Redispatch;
30 class ResponseTracker;
31 class TestInjector;
32 
34 
37 class Connection :
38  public BaseConnection,
39  public Atlas::Objects::ObjectsDecoder
40 {
41 public:
43 
47  Connection(const std::string &cnm, const std::string& host, short port, bool debug);
48 
53  Connection(const std::string &cnm, const std::string& socket, bool debug);
54 
55  virtual ~Connection();
56 
60  int connect();
61 
63  int disconnect();
64 
65  TypeService* getTypeService() const
66  { return m_typeService.get(); }
67 
68  ResponseTracker* getResponder() const
69  { return m_responder.get(); }
70 
72 
75  virtual void send(const Atlas::Objects::Root &obj);
76 
77  void setDefaultRouter(Router* router);
78 
79  void clearDefaultRouter();
80 
81  void registerRouterForTo(Router* router, const std::string toId);
82  void unregisterRouterForTo(Router* router, const std::string toId);
83 
84  void registerRouterForFrom(Router* router, const std::string fromId);
85  void unregisterRouterForFrom(Router* router, const std::string fromId);
86 
91  void lock();
92 
95  void unlock();
96 
103  void refreshServerInfo();
104 
110  void getServerInfo(ServerInfo&) const;
111 
112  sigc::signal<void> GotServerInfo;
113 
115 
119  sigc::signal<bool> Disconnecting;
120 
127  sigc::signal<void, const std::string&> Failure;
128 
130 
133  sigc::signal<void, Status> StatusChanged;
134 
135 protected:
138  virtual void setStatus(Status sc);
139 
141  virtual void handleFailure(const std::string &msg);
142 
143  virtual void handleTimeout(const std::string& msg);
144 
145  virtual void onConnect();
146 
147  void objectArrived(const Atlas::Objects::Root& obj);
148 
149  const std::string _host;
150  const short _port;
151  bool _debug;
152  const std::string _socket;
153 
154  friend class Redispatch;
155  friend class TestInjector;
156 
159  void postForDispatch(const Atlas::Objects::Root& obj);
160 
161  void cleanupRedispatch(Redispatch* r);
162 
163  void gotData(PollData&);
164 
165  void dispatchOp(const Atlas::Objects::Operation::RootOperation& op);
166  void handleServerInfo(const Atlas::Objects::Operation::RootOperation& op);
167 
168  void onDisconnectTimeout();
169 
170  typedef std::deque<Atlas::Objects::Operation::RootOperation> OpDeque;
171  OpDeque m_opDeque;
172 
173  std::unique_ptr<TypeService> m_typeService;
174  Router* m_defaultRouter; // need several of these?
175 
176  typedef std::map<std::string, Router*> IdRouterMap;
177  IdRouterMap m_toRouters;
178  IdRouterMap m_fromRouters;
179 
180  int m_lock;
181 
182  Atlas::Objects::ObjectsEncoder* m_debugRecvEncoder;
183 
184  std::vector<Redispatch*> m_finishedRedispatches;
185  ServerInfo m_info;
186 
187  std::unique_ptr<ResponseTracker> m_responder;
188 };
189 
191 long getNewSerialno();
192 
193 } // of Eris namespace
194 
195 #endif
196 
Definition: Redispatch.h:15
Status
possible states for the connection
Definition: BaseConnection.h:48
virtual void onConnect()
derived-class notification when connection and negotiation is completed
Definition: Connection.cpp:351
Information about a specific game server, retrieved via the Meta-server and anonymous GETs...
Definition: ServerInfo.h:21
int disconnect()
Initiate disconnection from the server.
Definition: Connection.cpp:83
void postForDispatch(const Atlas::Objects::Root &obj)
Inject a local operation into the dispatch queue.
Definition: Connection.cpp:364
virtual void handleFailure(const std::string &msg)
Process failures (to track when reconnection should be permitted)
Definition: Connection.cpp:327
Definition: LogStream.h:35
void getServerInfo(ServerInfo &) const
Retrive the current server information.
Definition: Connection.cpp:239
OpDeque m_opDeque
store of all the recived ops waiting to be dispatched
Definition: Connection.h:171
sigc::signal< bool > Disconnecting
Emitted when the disconnection process is initiated.
Definition: Connection.h:119
Definition: Account.cpp:33
void unlock()
Unlock the connection (permit status change).
Definition: Connection.cpp:217
Underlying Atlas connection, providing a send interface, and receive (dispatch) system.
Definition: Connection.h:37
virtual void send(const Atlas::Objects::Root &obj)
Transmit an Atlas::Objects instance to the server.
Definition: Connection.cpp:147
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
Definition: Poll.h:11
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
int connect()
If the underlying socket cannot be opened, connect will return an error number immediately.
Definition: Connection.cpp:74
A service class querying and caching types.
Definition: TypeService.h:24
Definition: Response.h:59
sigc::signal< void, const std::string & > Failure
Emitted when a non-fatal error occurs.
Definition: Connection.h:127
void refreshServerInfo()
Update the information stored about the current server.
Definition: Connection.cpp:244
Underlying Atlas connection, providing a send interface, and receive (dispatch) system.
Definition: BaseConnection.h:32
void lock()
Lock then connection&#39;s state.
Definition: Connection.cpp:212
abstract interface for objects that can route Atlas data.
Definition: Router.h:10