#ifndef TSSOCKET_H_ #define TSSOCKET_H_ /* * If we aren't using MFC then let's define our own base socket * class. If we are using MFC then we want to use the MFC CSocket * class so that we can pump messages while waiting on the socket. */ #ifdef TS_USE_MFC #include "afxsock.h" #define TS_USE_WINSOCK #else #ifdef WIN32 #define TS_USE_WINSOCK #include #else #include typedef struct sockaddr SOCKADDR; typedef struct sockaddr_in SOCKADDR_IN; typedef struct hostent *LPHOSTENT; typedef struct in_addr *LPIN_ADDR; #define SOCKET_ERROR -1 #define INVALID_SOCKET -1 #endif class CSocket { public: BOOL Create(unsigned int socketPort = 0, int socketType = SOCK_STREAM, const char *socketAddress = NULL ); BOOL Connect(const char *hostAddress, unsigned int portNumber); BOOL Connect(const SOCKADDR* lpSockAddr, int sockAddrLen); BOOL Bind(unsigned int socketPort, const char *socketAddress); BOOL Bind(const SOCKADDR* lpSockAddr, int nSockAddrLen); BOOL Socket(int nSocketType=SOCK_STREAM, int nProtocolType = 0, int addressFormat = PF_INET); virtual void Close(); virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0 ); virtual int Receive( void* lpBuf, int nBufLen, int nFlags = 0 ); int GetLastError(); private: int m_hSocket; }; #endif /* * Convenience function to initialize Winsock if you're using windows. */ #ifdef TS_USE_WINSOCK int TSInitializeWinsock(); #endif class TSSocket : public CSocket { public: TSSocket(); virtual ~TSSocket(); int Read(char *buffer, int size); int ReadLine(char *buffer, int size); char ReadChar(); void ClearBuffer() { bufferStart = bufferEnd = 0; } BOOL Create(unsigned int socketPort = 0, int socketType = SOCK_STREAM, char *socketAddress = NULL); BOOL Connect( const char *hostAddress, unsigned int portNumber); int IsConnected() { return connected; } int ReceiveInt(int *val); int ReceiveString(TSString *str); int ReceiveString(char *str, int size); int ReceiveDouble(double *val); private: void Initialize(); int FillBuffer(); char *socketBuffer; int socketBufferSize; int bufferStart; int bufferEnd; int connected; }; /* * Global Utility functions to encode data values to a * string to be sent accross the socket to the TeamTrack * server. */ void TSEncodeString(TSString &in, TSString &out); void TSEncodeString(const char *in, TSString &out); void TSEncodeText(TSString &in, TSString &out); void TSEncodeText(const char *in, TSString &out); void TSEncodeInt(int in, TSString &out); void TSEncodeDouble(double in, TSString &out); #endif