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 Wed Nov 10 20:56:36 2004 for Eris by  doxygen 1.3.9.1