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
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
00019
class tcp_socket_stream;
00020
00021
namespace Eris
00022 {
00023
00024
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
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