#ifndef __IOCP_H_ #define __IOCP_H_ ////////////////////////////////////////////////////////////////////////// #include #include #include #include "DataStruct.h" #include "KeyList.h" ////////////////////////////////////////////////////////////////////////// static GUID g_GUIDAcceptEx = WSAID_ACCEPTEX; static GUID g_GUIDTransmitFile = WSAID_TRANSMITFILE; static GUID g_GUIDAcceptExaddrs = WSAID_GETACCEPTEXSOCKADDRS; ////////////////////////////////////////////////////////////////////////// class CIOCP { public: CIOCP(); virtual ~CIOCP(); public: CSmsCenterDlg * m_pDlg; CKeyList m_KeyList; //IO_GROUP m_io_group; //KEY_GROUP m_key_group; HANDLE m_h_iocp; SOCKET m_listen_socket; BOOL m_bInitSocket; SOCKET m_listen_socket2; BOOL m_bInitSocket2; BOOL m_bInit; //是否已初始化成功 LPFN_TRANSMITFILE lpTransmitFile; LPFN_ACCEPTEX lpAcceptEx; LPFN_GETACCEPTEXSOCKADDRS lpGetAcceptExSockAddrs; UINT uPort; TCHAR szAddress[32]; int m_n_thread_count; HANDLE m_h_thread[MAXTHREAD_COUNT]; HANDLE m_h_accept_event; HANDLE m_h_accept_event2; HANDLE m_h_MainLoop; HANDLE m_h_MainLoop2; BOOL m_bQuit; public: static DWORD WINAPI MainLoop2(LPVOID lp_param); void CheckForInvalidSQLConnection(); void CheckForInvalidConnection(); void InitIoContext_Send(IOCP_IO_SEND_PTR lp_io); void Close(); void SetDlg( CSmsCenterDlg * pDlg ); long GetFrame_Cmpp(IOCP_IO_PTR lp_io); long GetFrame(IOCP_IO_PTR lp_io); BOOL RegAcceptEvent2(); BOOL RegAcceptEvent(); BOOL PostAcceptEx2(); BOOL PostAcceptEx(); void CloseOneSocket( SOCKET & socket ); BOOL GetFunPointer(); BOOL BindAndListenSocket2(); BOOL BindAndListenSocket(); void CloseMainSocket(); BOOL Init(); static DWORD WINAPI MainLoop(LPVOID lp_param); private: void InitIoContext(IOCP_IO_PTR lp_io); BOOL DataAction(IOCP_IO_PTR lp_io,IOCP_KEY_PTR lp_key); BOOL HandleData(IOCP_IO_PTR lp_io,IOCP_KEY_PTR lp_key,int nFlags); BOOL StartThread(); void CloseThreadHandle( int count ); BOOL InitSocket(); static DWORD WINAPI CompletionRoutine(LPVOID lp_param); BOOL GetAddrAndPort(char*buf,char ip[],UINT &port); }; ////////////////////////////////////////////////////////////////////////// #endif //__IOCP_H_