#include <winsock2.h>
#include "GlobalDefs.h"
#include "Packet.h"
#include "Status.h"
#include "CTD_TCP.h"
#include "TimeSync.h"

class TCPClient
{
public:
	enum
	{
		LAST_PACKET_SIZE = 1500
	};

	TCPClient( char* pchIpAddress, UINT32 nPort, Status *pStatus, char *pClientName = NULL );
	~TCPClient(void);

   // Initialize all hardware to known but generic state
   bool Initialize(INT32 nReceiveTimeout_ms);
   bool Kill(void);

   bool ReadPacketHdr( PacketHdr *pPacketHdr, UINT16 *socketError );
   bool ReadPacketData( INT8 *pPacketData, UINT16 length, UINT16 *socketError );

   bool SendPacket(Packet* pkt);
	bool SendPacket(CTDPacket* pkt);
   bool IsConnected(void){ return m_bIsConnected; }
	bool ReSync( PacketHdr *pPacketHdr );
	void Reinitialize(INT32 nReceiveTimeout_ms);

private:
   bool			m_bIsConnected;

   SOCKET		m_nSocketID;
   int			m_nPort;
   char			m_pchIpAddress[24];
   bool        m_bWsaStarted;
	Status		*m_pStatus;
	char			m_pchClientName[24];

};
