#pragma once #include "IOBuffer.h" #include #include // sock #include // win32 socket #pragma comment(lib,"ws2_32.lib") #include // extension socket library #pragma comment(lib,"mswsock.lib") #define WM_CONNECT WM_APP + 0x1001 #define WM_RECV_MSG WM_APP + 0x1002 #define WM_SOCK_CLOSE WM_APP + 0x1003 class CNetString { public: class IEventListener { public: virtual ~IEventListener() {} virtual void EventPacket(int iIndex, char* pPacket)=0; }; void SetEventListener(IEventListener* event) { m_event = event; } IEventListener* m_event; HWND m_hWnd; // ºÎ¸ð À©µµ¿ì ÇÚµé int m_iIndex; SOCKET m_hSocket; // Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏ UINT m_nPort; // Æ÷Æ® CHAR m_strIPAddr[20]; // Server IPÀúÀå BOOL m_bConnect; // Á¢¼Ó »óÅ Ç÷¡±× BOOL m_bClose; CPacketIOBuffer m_RecvIO; char m_PacketBuffer[MAX_PACKETSIZE]; WSAEVENT m_hEvent; // ³×Æ®¿öÅ© À̺¥Æ® Çڵ鷯 HANDLE m_hEventThread; // Recv ½º·¹µå ÇÚµé std::list m_SendQue; std::list m_RecvQue; private: static DWORD WINAPI EventThreadProc(LPVOID lParam); // Main Thread void OnSendPacketData(); void OnReadPacketData(); ////////////////// // MessageHandling BOOL OnConnect(); // On Connect ½ÅÈ£½Ã BOOL OnClose(); // On Close ½ÅÈ£½Ã ///////////////// // ³»ºÎ ó¸® ÇÔ¼ö BOOL Connect(); // C-S ¿¬°á BOOL WinSockInit(); protected: virtual void OnSocketEvent(DWORD dID, DWORD dEvent) {}; BOOL NetworkEventHanlder(LONG lEvent); // ¸Þ¼¼Áö ºÐ±â ÇÔ¼ö void ProcessPacket(char* Packet, int PacketLen); int GetQueCnt() { return (int)m_RecvQue.size(); } int GetPacket(char* pPacket) { strcpy(pPacket, m_RecvQue.begin()->c_str()); return (int)strlen(pPacket); } void PopPacket() { m_RecvQue.pop_front(); } public: void GetLocalIP(char* LocalIP); BOOL IsConnect() { return m_bConnect; } virtual void SendPost(char* Packet); // ½ÃÀÛ Á¾·áÇÔ¼ö. BOOL Init(HWND hWnd, int iIndex, char* szIP, int nPort); // ÃʱâÈ­ virtual void Disconnect(); virtual void Update(); void Stop(); // Ŭ¶óÀÌ¾ðÆ® Á¤Áö void CloseAll(); void SetParent(HWND hWnd); public: CNetString(void); ~CNetString(void); };