BaseConnection.h

00001 #ifndef ERIS_BASE_CONNECTION_H
00002 #define ERIS_BASE_CONNECTION_H
00003 
00004 #include <Atlas/Objects/ObjectsFwd.h>
00005 #include <Atlas/Net/Stream.h>
00006 
00007 #include <sigc++/trackable.h>
00008 #include <sigc++/signal.h>
00009 
00010 #include <iostream>
00011 
00012 class tcp_socket_stream;
00013 
00014 namespace Atlas
00015 {
00016     class Bridge;
00017     class Codec;
00018 }
00019 
00020 namespace Eris
00021 {
00022 
00023 // Forward declarations 
00024 class Timeout;  
00025         
00027 class BaseConnection : virtual public sigc::trackable
00028 {
00029 public:
00031     virtual ~BaseConnection();
00032 
00035     virtual int connect(const std::string &host, short port);
00036 
00038     typedef enum {
00039         INVALID_STATUS = 0,     
00040         NEGOTIATE,              
00041         CONNECTING,             
00042         CONNECTED,              
00043         DISCONNECTED,           
00044         DISCONNECTING,          
00045         
00046         // doesn't really belong here, but enums aren't subclassable
00047         QUERY_GET               
00048     } Status;
00049 
00051     Status getStatus() const
00052     { return _status; }
00053     
00055     bool isConnected() const
00056     { return (_status == CONNECTED) || (_status == DISCONNECTING);}
00057     
00061     int getFileDescriptor();
00062     
00064     sigc::signal<void> Connected;
00065     
00067     sigc::signal<void> Disconnected;
00068 protected:
00070 
00073     BaseConnection(const std::string &cnm, const std::string &id, Atlas::Bridge *br);   
00074 
00076     void recv();
00077 
00079     virtual void setStatus(Status sc);
00080 
00082     virtual void onConnect();
00083 
00085     virtual void handleFailure(const std::string &msg) = 0;
00086 
00087     virtual void handleTimeout(const std::string& msg) = 0;
00088 
00089     void onConnectTimeout();
00090     void onNegotiateTimeout();
00091     
00094     void hardDisconnect(bool emit);
00095 
00097     void nonblockingConnect();
00098 
00100     void pollNegotiation();
00101 
00102     Atlas::Objects::ObjectsEncoder* _encode;    
00103     Atlas::Net::StreamConnect* _sc;             
00104     Atlas::Codec* m_codec;
00105     
00106     Status _status;                     
00107     const std::string _id;      
00108     
00109     tcp_socket_stream* _stream;         
00110     std::string _clientName;            
00111     
00114     Atlas::Bridge* _bridge;     
00115     Timeout* _timeout;          
00116         
00117     std::string _host;  
00118     short _port;        
00119 };
00120                 
00121 }       
00122 
00123 #endif
00124 

Generated on Sun Dec 16 13:06:01 2007 for Eris by  doxygen 1.5.2