#pragma once #include "akNetworkLinker.h" #include class AKNETWORK_DLLSPEC CakTCPSocket { public: typedef void (*RecvMsgFunc) (char* pMsg, int nMsglen, void*); typedef void (*SystemMsgFunc) (char* pMsg, int nMsglen, void*); public: CakTCPSocket(void); ~CakTCPSocket(void); enum CONNECTRESULT { CONNECTRESULT_CONNECT_FAIL = 0, //¿¬°á½ÇÆÐ CONNECTRESULT_CONNECT_SUCCESS = 1, //¿¬°á¼º°ø CONNECTRESULT_ALREADY_CREATESOCKET = 2, //À̹̻ý¼ºµÈ ¼ÒÄÏ CONNECTRESULT_INVALID_SOCKET = 3, //¼ÒÄÏ»ý¼º ½ÇÆÐ CONNECTRESULT_WSASTARTUP_FAIL = 5 //StartUP½ÇÆÐ }; // Á¢¼Ó CONNECTRESULT Connect(char* serverip, int port); // Á¢¼Ó µÉ¶§±îÁö Á¢¼Ó ½Ãµµ void ConnectContinue(char* serverip, int port); // Á¾·á void DisConnect(); // ¼ÒÄÏ ¸Þ¼¼Áö ¼ö½Å ÄÝ¹é ¼³Á¤ void SetRecvMessageCallback(RecvMsgFunc userFunc, void* data = NULL); // ½Ã½ºÅÛ ¸Þ¼¼Áö ¼ö½Å ÄÝ¹é ¼³Á¤ void SetSystemMessageCallback(RecvMsgFunc userFunc, void* data = NULL); // ¸Þ¼¼Áö Àü¼Û bool Send(char* sendchar, int length); // Á¢¼Ó »óÅ inline BOOL GetConnectState(){return m_isConnect;}; SOCKET getSocket(){return m_ClinetSocket;}; static unsigned int _stdcall RecvMSG(void *arg); // ¹Þ´Â ¾²·¹µå bool m_bConnectRetry; //Á¢¼Ó µÉ¶§±îÁö Á¢¼Ó ½Ãµµ HANDLE m_hThreadConnect; int getInstanceHandle() const { return m_nInstanceHandle; } void setInstanceHandle(int val) { m_nInstanceHandle = val; } protected: void setSystemMsg(const char* pMsg, ...); private: static unsigned int _stdcall threadConnect(void* arg); private: int m_nThreadFlag; HANDLE m_hMutex; //¹ÂÅØ½º º¯¼ö ¼±¾ð //CRITICAL_SECTION m_csSocketSend; SOCKET m_ClinetSocket; //Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏ bool m_isConnect; //Á¢¼Ó »óÅ int m_port; //Á¢¼Ó Æ÷Æ® char m_servIP[15]; //Á¢¼Ó ¼­¹ö HANDLE m_hThread; //¾²·¹µå ÇÚµé unsigned int m_dwThreadID; //¾²·¹µå ¾ÆÀ̵ð void* m_pPacketSendBuf; RecvMsgFunc m_recvmsgFunc; void* m_recvmsgData; SystemMsgFunc m_systemmsgFunc; void* m_systemmsgData; int m_nInstanceHandle; };