Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

BaseConnection.h

00001 #ifndef ERIS_BASE_CONNECTION_H 00002 #define ERIS_BASE_CONNECTION_H 00003 00004 #include <sigc++/object.h> 00005 #include <sigc++/signal.h> 00006 00007 #include <iostream> 00008 00009 // Forward declarations 00010 namespace Atlas { 00011 class Bridge; 00012 template <class Stream> class Codec; 00013 namespace Objects { class Encoder; } 00014 namespace Net { class StreamConnect; } 00015 namespace Message { class Encoder; } 00016 } 00017 00018 // Forward declaration of the skstream type 00019 class tcp_socket_stream; 00020 00021 namespace Eris 00022 { 00023 00024 // Forward declarations 00025 class Timeout; 00026 00028 class BaseConnection : 00029 virtual public SigC::Object 00030 { 00031 public: 00033 virtual ~BaseConnection(); 00034 00037 virtual void connect(const std::string &host, short port); 00038 00040 typedef enum { 00041 INVALID_STATUS = 0, 00042 NEGOTIATE, 00043 CONNECTING, 00044 CONNECTED, 00045 DISCONNECTED, 00046 DISCONNECTING, 00047 00048 // doesn't really belong here, but enums aren't subclassable 00049 QUERY_GET 00050 } Status; 00051 00053 Status getStatus() const 00054 { return _status; } 00055 00057 bool isConnected() const 00058 { return (_status == CONNECTED) || (_status == DISCONNECTING);} 00059 00063 int getFileDescriptor(); 00064 00066 SigC::Signal0<void> Connected; 00067 00069 SigC::Signal0<void> Disconnected; 00070 protected: 00072 00075 BaseConnection(const std::string &cnm, const std::string &id, Atlas::Bridge *br); 00076 00078 void recv(); 00079 00081 virtual void setStatus(Status sc); 00082 00084 virtual void onConnect(); 00085 00087 virtual void handleFailure(const std::string &msg) = 0; 00088 00090 virtual void bindTimeout(Timeout &t, Status sc) = 0; 00091 00094 void hardDisconnect(bool emit); 00095 00097 void nonblockingConnect(); 00098 00100 void pollNegotiation(); 00101 00102 Atlas::Objects::Encoder* _encode; 00103 Atlas::Message::Encoder* _msgEncode; 00104 Atlas::Net::StreamConnect* _sc; 00105 Atlas::Codec<std::iostream>* _codec; 00106 00107 Status _status; 00108 const std::string _id; 00109 00110 tcp_socket_stream* _stream; 00111 std::string _clientName; 00112 00115 Atlas::Bridge* _bridge; 00116 Timeout* _timeout; 00117 00118 std::string _host; 00119 short _port; 00120 }; 00121 00122 } 00123 00124 #endif 00125

Generated on Tue Jul 27 21:00:43 2004 for Eris by doxygen 1.3.7