Eris  1.3.21
BaseConnection.h
1 #ifndef ERIS_BASE_CONNECTION_H
2 #define ERIS_BASE_CONNECTION_H
3 
4 #include <Atlas/Objects/ObjectsFwd.h>
5 
6 #include <sigc++/trackable.h>
7 #include <sigc++/signal.h>
8 
9 #include <string>
10 
11 class tcp_socket_stream;
12 
13 namespace Atlas
14 {
15  class Bridge;
16  class Codec;
17  namespace Net
18  {
19  class StreamConnect;
20  }
21 }
22 
23 namespace Eris
24 {
25 
26 // Forward declarations
27 class Timeout;
28 
30 class BaseConnection : virtual public sigc::trackable
31 {
32 public:
34  virtual ~BaseConnection();
35 
38  virtual int connect(const std::string &host, short port);
39 
41  typedef enum {
48 
49  // doesn't really belong here, but enums aren't subclassable
51  } Status;
52 
54  Status getStatus() const
55  { return _status; }
56 
58  bool isConnected() const
59  { return (_status == CONNECTED) || (_status == DISCONNECTING);}
60 
64  int getFileDescriptor();
65 
71  const std::string& getHost() const;
72 
78  short getPort() const;
79 
81  sigc::signal<void> Connected;
82 
84  sigc::signal<void> Disconnected;
85 protected:
87 
90  BaseConnection(const std::string &cnm, const std::string &id, Atlas::Bridge *br);
91 
93  void recv();
94 
96  virtual void setStatus(Status sc);
97 
99  virtual void onConnect();
100 
102  virtual void handleFailure(const std::string &msg) = 0;
103 
104  virtual void handleTimeout(const std::string& msg) = 0;
105 
106  void onConnectTimeout();
107  void onNegotiateTimeout();
108 
111  void hardDisconnect(bool emit);
112 
114  void nonblockingConnect();
115 
117  void pollNegotiation();
118 
119  Atlas::Objects::ObjectsEncoder* _encode;
120  Atlas::Net::StreamConnect* _sc;
121  Atlas::Codec* m_codec;
122 
124  const std::string _id;
125 
126  tcp_socket_stream* _stream;
127  std::string _clientName;
128 
131  Atlas::Bridge* _bridge;
133 
134  std::string _host;
135  short _port;
136 };
137 
138 }
139 
140 #endif
141