eris  1.4.0
A WorldForge client library.
BaseConnection.h
1 #ifndef ERIS_BASE_CONNECTION_H
2 #define ERIS_BASE_CONNECTION_H
3 
4 #include "StreamSocket.h"
5 
6 #include <Atlas/Objects/ObjectsFwd.h>
7 #include <Atlas/Negotiate.h>
8 
9 #include <sigc++/trackable.h>
10 #include <sigc++/signal.h>
11 
12 #include <boost/asio/io_service.hpp>
13 
14 #include <string>
15 #include <memory>
16 #include <functional>
17 
18 namespace Atlas
19 {
20  class Bridge;
21  class Codec;
22  namespace Objects {
23  class Factories;
24  }
25  namespace Net
26  {
27  class StreamConnect;
28  }
29 }
30 
31 namespace Eris
32 {
33 
34 // Forward declarations
35 
36 class StreamSocket;
37 
39 class BaseConnection : virtual public sigc::trackable
40 {
41 public:
43  virtual ~BaseConnection();
44 
47  virtual int connectRemote(const std::string &host, short port);
48 
52  virtual int connectLocal(const std::string &socket);
53 
55  typedef enum {
62 
63  // doesn't really belong here, but enums aren't subclassable
65  } Status;
66 
68  Status getStatus() const
69  { return _status; }
70 
72  bool isConnected() const
73  { return (_status == CONNECTED) || (_status == DISCONNECTING);}
74 
75 
81  const std::string& getHost() const;
82 
88  short getPort() const;
89 
90  Atlas::Objects::Factories& getFactories();
91 
92  const Atlas::Objects::Factories& getFactories() const;
93 
95  sigc::signal<void> Connected;
96 
98  sigc::signal<void> Disconnected;
99 protected:
101 
104  BaseConnection(boost::asio::io_service& io_service, std::string clientName, std::string id);
105 
106  void stateChanged(StreamSocket::Status status);
107 
109  virtual void setStatus(Status sc);
110 
112  virtual void onConnect();
113 
115  virtual void handleFailure(const std::string &msg) = 0;
116 
117  virtual void handleTimeout(const std::string& msg) = 0;
118 
119  virtual void dispatch() = 0;
120 
121  void onConnectTimeout();
122  void onNegotiateTimeout();
123 
126  void hardDisconnect(bool emit);
127 
128  boost::asio::io_service& _io_service;
129  std::unique_ptr<Atlas::Objects::Factories> _factories;
130  std::shared_ptr<StreamSocket> _socket;
131 
133  const std::string _id;
134 
135  std::string _clientName;
136 
139  Atlas::Bridge* _bridge;
140 
141  std::string _host;
142  short _port;
143 };
144 
145 }
146 
147 #endif
148 
Eris::BaseConnection::hardDisconnect
void hardDisconnect(bool emit)
Definition: BaseConnection.cpp:162
Eris::BaseConnection::connectRemote
virtual int connectRemote(const std::string &host, short port)
Definition: BaseConnection.cpp:65
Eris::BaseConnection::~BaseConnection
virtual ~BaseConnection()
destructor, will perform a hard disconnect if necessary
Definition: BaseConnection.cpp:54
Eris::BaseConnection::onConnect
virtual void onConnect()
derived-class notification when connection and negotiation is completed
Definition: BaseConnection.cpp:178
Eris::BaseConnection::Disconnected
sigc::signal< void > Disconnected
final disconnect (or hard disocnnect) notifcation
Definition: BaseConnection.h:98
Eris::StreamSocket::Status
Status
Definition: StreamSocket.h:58
Eris::BaseConnection::_status
Status _status
current status of the connection
Definition: BaseConnection.h:132
Eris::BaseConnection::_bridge
Atlas::Bridge * _bridge
Definition: BaseConnection.h:139
Eris::BaseConnection::Connected
sigc::signal< void > Connected
sent on successful negotiation of a game server connection
Definition: BaseConnection.h:95
Eris::BaseConnection::setStatus
virtual void setStatus(Status sc)
update the connection status and generate signals
Definition: BaseConnection.cpp:198
Eris::BaseConnection::_id
const std::string _id
a unique identifier for this connection
Definition: BaseConnection.h:133
Eris::BaseConnection::INVALID_STATUS
@ INVALID_STATUS
indicates an illegal state
Definition: BaseConnection.h:56
Eris::BaseConnection::DISCONNECTED
@ DISCONNECTED
finished disconnection
Definition: BaseConnection.h:60
Eris::BaseConnection::_host
std::string _host
the host name we're connected to
Definition: BaseConnection.h:141
Eris::BaseConnection::CONNECTING
@ CONNECTING
stream / socket connection in progress
Definition: BaseConnection.h:58
Eris::BaseConnection::NEGOTIATE
@ NEGOTIATE
Atlas negotiation in progress.
Definition: BaseConnection.h:57
Eris::BaseConnection::isConnected
bool isConnected() const
Ascertain whether or not the connection is usable for transport.
Definition: BaseConnection.h:72
Eris
Definition: Account.cpp:33
Eris::BaseConnection::handleFailure
virtual void handleFailure(const std::string &msg)=0
derived-class notification when a failure occurs
Eris::BaseConnection::BaseConnection
BaseConnection(boost::asio::io_service &io_service, std::string clientName, std::string id)
create an unconnected instance
Definition: BaseConnection.cpp:38
Eris::BaseConnection::DISCONNECTING
@ DISCONNECTING
clean disconnection in progress
Definition: BaseConnection.h:61
Eris::BaseConnection::CONNECTED
@ CONNECTED
connection fully established
Definition: BaseConnection.h:59
Eris::BaseConnection
Underlying Atlas connection, providing a send interface, and receive (dispatch) system.
Definition: BaseConnection.h:39
Eris::BaseConnection::getStatus
Status getStatus() const
get the current status of the connection
Definition: BaseConnection.h:68
Eris::BaseConnection::getHost
const std::string & getHost() const
Definition: BaseConnection.cpp:203
Eris::BaseConnection::_port
short _port
the port we're connected to
Definition: BaseConnection.h:142
Eris::BaseConnection::getPort
short getPort() const
Definition: BaseConnection.cpp:208
Eris::BaseConnection::_clientName
std::string _clientName
the client identified used during connection
Definition: BaseConnection.h:135
Eris::BaseConnection::connectLocal
virtual int connectLocal(const std::string &socket)
Definition: BaseConnection.cpp:98
Eris::BaseConnection::Status
Status
possible states for the connection
Definition: BaseConnection.h:55
Eris::BaseConnection::QUERY_GET
@ QUERY_GET
meta-query performing GET operation
Definition: BaseConnection.h:64