📄 netengine.h
字号:
// NETENGINE_H
// =================================================================
// 网络引擎库,采用IOCP模型
// ================================================================
// 作者(Aurthor): 姜云(FOX)
// 信箱(Email): jiangyun@vip.citiz.net
// 日期(Developed On): 12.18.2003
// 更新(Last Update): 12.18.2003
// ================================================================
#ifndef NETENGINE_H_12_18_2003_
#define NETENGINE_H_12_18_2003_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//宏定义
#define DATA_BUFSIZE 8192
//头文件
#include "inetengine.h"
#include <winsock2.h>
#include <windows.h>
#include <list>
#include <iostream>
using namespace std;
class IUnKown
{
public:
IUnKown( void ){
m_dwCounter = 1;
}
virtual ~IUnKown( void ){
}
public:
//添加引用
DWORD AddRef( void ){
return (++m_dwCounter);
}
//释放引用
DWORD Release( void ){
if( --m_dwCounter == 0 ){
delete this;
}
return m_dwCounter;
}
private:
DWORD m_dwCounter;//计数
};
//关键键
struct KEY{
OVERLAPPED s_sRecvOv; //recv重叠结构
OVERLAPPED s_sSendOv; //send重叠结构
SOCKET s_hSocket;//套接字句柄
WSABUF s_sRecvBuf;//recv缓冲结构
WSABUF s_sSendBuf;//send缓冲结构
char s_cBuffer[DATA_BUFSIZE];//缓冲区
bool s_bIsRecv; //是否为Recv消息
};
//用户节点
struct UserNode{
DWORD s_dwUID;
KEY* s_pKey;
};
//网络引擎库,采用IOCP模型
//Server类型,多点交流
class NetEngineServer:IUnKown
{
public://类型定义
typedef list<UserNode> CListU;
typedef list<DWORD> CListDW;
typedef CListU::iterator CListUPointer;
typedef CListDW::iterator CListDWPointer;
typedef bool (*MsgFun)( void* a_pBuffer );
public:
NetEngineServer( MsgFun a_pFun,DWORD a_dwPort = 5000 );
virtual ~NetEngineServer( void );
public:
//工作线程
static DWORD WINAPI ThreadFunc( LPVOID a_pVoid );
//单件设计模式.this指针返回
static NetEngineServer* Instance( MsgFun a_pFun = NULL );
public:
//获取完全端口句柄
HANDLE GetHandle( void );
//消息监听
bool Listen( void );
private:
//获取新ID,防止重复
DWORD GetNewID( void );
//创建工作线程
bool CreateWorkerThread( void );
//初始化
bool InitServer( DWORD a_dwPort );
//内部消息处理
bool MsgProcess( KEY* a_pKey );
//连接断开处理
bool CloseOneSocket( KEY* a_pKey );
private:
SOCKET m_Listen;//接受
HANDLE m_hCompletionPort;//重叠端口句柄
MsgFun m_pMsgProcessFun;//消息处理函数指针
CListU m_cUserList;//用户链表缓冲池
CListDW m_cIDList;//ID缓冲池
DWORD m_dwCurID;//当前分配到ID
static NetEngineServer* m_pMe;//对象指针(单件设计)
};
#endif //NETENGINE_H_12_18_2003_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -