90 lines
2.4 KiB
C++
90 lines
2.4 KiB
C++
#ifndef __IOCP_H_
|
|
#define __IOCP_H_
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <winsock2.h>
|
|
#include <mswsock.h>
|
|
|
|
#include <windows.h>
|
|
|
|
#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_
|
|
|