Files
wnmj/Servers/服务器组件/网站网关服务器/IOCPServer.h

68 lines
1.6 KiB
C
Raw Normal View History

2026-02-13 14:34:15 +08:00
#ifndef __IOCPSERVER_H__
#define __IOCPSERVER_H__
#include <map>
#include "IDAllocator.h"
#include "Overlapped.h"
#include "TCPSocket.h"
#include "IOThreads.h"
using namespace std;
void ErrorExit(LPTSTR lpszFunction);
class CTCPSocket;
typedef map<WORD,CTCPSocket*> SocketMap;
typedef CArray<CIOWorkerThread *> CIOWorkerThreadPtrArray;
class CIOCPServer
{
public:
CIOCPServer(void);
virtual ~CIOCPServer(void);
//<2F><><EFBFBD><EFBFBD>
bool Start(WORD nMaxClient, WORD nPort);
//ֹͣ
void Stop();
// <20><><EFBFBD>µĿͻ<C4BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual CTCPSocket* onCreateTCPSocket(WORD nClient, WORD socket, DWORD dwClientAddr);
// <20>Ͽ<EFBFBD><CFBF>ͻ<EFBFBD><CDBB><EFBFBD>
bool Disconnect(WORD nClient);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool SendData(WORD nClient, void* data, DWORD len);
public:
// <20><><EFBFBD><EFBFBD>socketmap<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ID
CTCPSocket* CreateTCPSocket(SOCKET socket, DWORD dwClientAddr);
WORD InserTCPSocket(CTCPSocket* tcpSocket);
void RemoveTCPSocket(WORD nClient);
CTCPSocket* GetTCPSocket(WORD nClient);
bool PostRecv(WORD nClient, SOCKET socket);
public:
// <20>¼<EFBFBD>֪ͨ
virtual int OnAccept(WORD nClient) {return 0;}
virtual int OnClose(WORD nClient) {return 0;}
virtual int OnSend(WORD nClient, char* pData, DWORD dwDataLen) {return 0;}
virtual int OnReceive(WORD nClient, char* pData, DWORD dwDataLen) {return 0;}
virtual int OnError(WORD nClient, int iError) {return 0;}
private:
CIOAcceptThread m_IOAcceptThread; //Ӧ<><D3A6><EFBFBD>߳<EFBFBD>
CIOWorkerThreadPtrArray m_IOWorkerThreadArray; //<2F><>д<EFBFBD>߳<EFBFBD>
SOCKET m_hServerSocket;
HANDLE m_hCompletionPort;
SocketMap m_mapSocket;
CCriticalSection m_cs;
IDAllocator m_idAllocator;
};
#endif