SmsCenter/IOCP/IOCP.h
2025-01-03 16:47:25 +08:00

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_