📄 iocpcontext.h
字号:
// IocpContext.h: interface for the CIocpContext class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_IOCPCONTEXT_H__080BC8C9_9E87_4C0F_949B_3CA3ACD855C9__INCLUDED_)
#define AFX_IOCPCONTEXT_H__080BC8C9_9E87_4C0F_949B_3CA3ACD855C9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define MAXSEQUENCENUMBER 200000001 //最大的顺序号
#define MAXHASHSIZE 200001 //最大的哈希值
#define MAXKEYNUMBER 200000001 //最大的标识号
class CIocpManager;
typedef CMap<int, int, CIocpBuffer*, CIocpBuffer*> CBufferMap;
class AFX_EXT_CLASS CIocpContext
{
public:
CIocpContext();
virtual ~CIocpContext();
public:
SOCKET m_soContext; //对应的套接字
CCriticalSection m_csContext;
int m_nNumberOfPengingIo; //当前的I/O请求数,在ReleaseContext时用到
SOCKADDR_IN m_saRemote; //远程机器信息
CIocpManager* m_pIocpMngr;
private:
POSITION m_nPosition; //记录数组中的位置
public:
int EnterIoLoop(); //添加I/O请求数
int ExitIoLoop(); //减少I/O请求数
void SetPosition(POSITION pos) {m_nPosition = pos;};
POSITION GetPosition() {return m_nPosition;};
//发送或接收数据时顺序控制
public:
CIocpBuffer m_bufPackage; //若接收不足MAXBUFLEN长度,则用来保存数据的临时缓冲区
int m_nSendSequenceNumber; //需要发送的最大顺序号
int m_nCurrentSendSequenceNumber; //当前发送的请求顺序号
CBufferMap m_mapSendBuffer; //发送缓冲区数组
int m_nRecvSequenceNumber; //需要接收的最大顺序号
int m_nCurrentRecvSequenceNumber; //当前接收的请求顺序号
CBufferMap m_mapRecvBuffer; //接收缓冲区数组
//网络传输包的控制
private:
CCriticalSection m_csFreePacket;
CPtrList m_plFreePacket; //空闲的传输包
CCriticalSection m_csUsedPacket;
CPtrList m_plUsedPacket; //使用的传输包
public:
CIocpPacket* AllocatePacket(ULONG ulKey, WORD wType=PACKETTYPE_WRITE); //分配包
CIocpPacket* FindPacket(ULONG ulKey, WORD wType=PACKETTYPE_READ); //查找包
void ReleasePacket(CIocpPacket* pPacket); //释放包
void ReleasePacket(ULONG ulKey, WORD wType); //释放包
void FreePacket(); //释放空间
//传输的唯一标识控制
private:
ULONG m_ulKey; //传输的唯一标识
public:
ULONG GenerateKey(); //创建传输的唯一标识
GUID GenerateGuid(); //为每个数据包创建GUID
};
#endif // !defined(AFX_IOCPCONTEXT_H__080BC8C9_9E87_4C0F_949B_3CA3ACD855C9__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -