DragonNest/Common/NxServerLib/include/NxAsyncEvent.h

90 lines
1.6 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
#pragma once
#include "NxMemPool.h"
struct NxAsyncEventType
{
enum
{
Event_None = 0,
Event_Accept,
Event_Connect,
Event_Close,
Event_Send,
Event_Receive,
Event_Timer,
Event_Packet,
Event_UserEvent
};
};
class NxAsyncEventHandler;
const int ASYNC_EVENT_POOL_CNT = 2048;
/// <20>񵿱<EFBFBD> I/O <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޾ƿ<DEBE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
typedef struct NxAsyncEvent : OVERLAPPED//, NxPooled_Object<NxAsyncEvent, ASYNC_EVENT_POOL_CNT>
{
/// <20>̺<EFBFBD>Ʈ Ÿ<><C5B8>
DWORD nEventType;
/// <20>ۼ<EFBFBD><DBBC><EFBFBD> ũ<><C5A9>
unsigned long nTransBytes;
/// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
unsigned long nError;
/// <20>̺<EFBFBD>Ʈ <20>ڵ鸵<DAB5><E9B8B5> <20><>ü
NxAsyncEventHandler* pHandler;
/// WSASend <20>ɾ<EFBFBD><C9BE><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void* pPacket;
/// <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
DWORD nUID;
/// <20><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ Ÿ<><C5B8>
DWORD nUserEventType;
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>̺<EFBFBD>Ʈ Ÿ<><C5B8><EFBFBD><EFBFBD> Accept <20><> <20><><EFBFBD><EFBFBD><ECBFA1> Listen Port <20><><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
DWORD nExtra;
void Clear()
{
Internal = 0;
InternalHigh = 0;
Pointer = 0;
hEvent = 0;
Offset = 0;
OffsetHigh = 0;
hEvent = 0;
nEventType = 0;
nTransBytes = 100;
nError = 0;
pHandler = NULL;
pPacket = NULL;
nUID = 0xffffffff;
nUserEventType = 0;
nExtra = 0;
}
}NxAsyncEvent;
class NxAsyncEventPool
{
public:
static void Create(int nReserveSize);
static void Destroy();
static NxAsyncEvent* Alloc();
static void Free(NxAsyncEvent* pEvent);
private:
static NxMemPool<NxAsyncEvent, ASYNC_EVENT_POOL_CNT> ms_Instance;
};
// AsyncEvent <20><> <20>ڵ鸵 <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD>
class NxAsyncEventHandler
{
public:
NxAsyncEventHandler() { }
virtual ~NxAsyncEventHandler() { }
virtual void HandleEvent( NxAsyncEvent* pEvent ) = 0;
};