#if !defined (GENERICCONNECTION_H_)
#define GENERICCONNECTION_H_
#include
#ifdef USE_TCP_LIBRARY
#include
#include
#include
#else //default to UDP_LIBRARY
#include
#include
#endif
#ifdef EXTERNAL_DISTRO
namespace NAMESPACE
{
#endif
namespace GenericAPI
{
enum eConState
{
CON_DISCONNECT,
CON_NEGOTIATE,
CON_CONNECT
};
#ifdef USE_TCP_LIBRARY
class GenericConnection : public TcpConnectionHandler
#else //default to UDP_LIBRARY
class GenericConnection : public UdpLibrary::UdpConnectionHandler
#endif
{
public:
GenericConnection(const char *host,
short port,
GenericAPICore *apiCore,
unsigned reconnectTimeout,
unsigned noDataTimeoutSecs = 5,
unsigned noAckTimeoutSecs = 5,
unsigned incomingBufSizeInKB = 32,
unsigned outgoingBufSizeInKB = 32,
unsigned keepAlive = 1,
unsigned maxRecvMessageSizeInKB = 0,
unsigned holdTime = 0);
virtual ~GenericConnection();
#ifdef USE_TCP_LIBRARY
virtual void OnRoutePacket(TcpConnection *con, const unsigned char *data, int dataLen);
virtual void OnTerminated(TcpConnection *con);
#else //default to UDP_LIBRARY
virtual void OnRoutePacket(UdpLibrary::UdpConnection *con, const unsigned char *data, int dataLen);
virtual void OnTerminated(UdpLibrary::UdpConnection *con);
#endif
#ifdef USE_SERIALIZE_LIB
void Send(const unsigned char *data, int dataLen);
#else
void Send(Base::ByteStream &msg);
#endif
void changeHostPort(const char *host, short port);
bool isConnected() { return m_bConnected; }
void disconnect();
void process(bool giveTime = true);
static unsigned ms_crcBytes;
private:
bool m_bConnected;
GenericAPICore *m_apiCore;
#ifdef USE_TCP_LIBRARY
TcpManager *m_manager;
TcpConnection *m_con;
#else //default to UDP_LIBRARY
UdpLibrary::UdpManager *m_manager;
UdpLibrary::UdpConnection *m_con;
#endif
std::string m_host;
std::string m_nextHost;
short m_port;
short m_nextPort;
unsigned m_lastTrack;
eConState m_conState;
time_t m_conTimeout;
unsigned m_reconnectTimeout;
};
};
#ifdef EXTERNAL_DISTRO
};
#endif
#endif