68 lines
1.6 KiB
C
68 lines
1.6 KiB
C
|
|
#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
|