#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; /// ºñµ¿±â I/O ÀÛ¾÷ÀÇ °á°ú¸¦ ¹Þ¾Æ¿Ã Á¤º¸ ±¸Á¶Ã¼ typedef struct NxAsyncEvent : OVERLAPPED//, NxPooled_Object { /// À̺¥Æ® ŸÀÔ DWORD nEventType; /// ¼Û¼ö½Å Å©±â unsigned long nTransBytes; /// ¿¡·¯ÄÚµå unsigned long nError; /// À̺¥Æ® Çڵ鸵ÇÒ °´Ã¼ NxAsyncEventHandler* pHandler; /// WSASend °É¾ú´ø ÆÐŶ Æ÷ÀÎÅÍ void* pPacket; /// À¯Àú À妽º DWORD nUID; /// À¯Àú À̺¥Æ® ŸÀÔ DWORD nUserEventType; /// ¿©ºÐÀÇ °ª À̺¥Æ® ŸÀÔÀÌ Accept ÀÏ °æ¿ì¿¡´Â Listen Port °ªÀÌ µÈ´Ù. 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 ms_Instance; }; // AsyncEvent ¸¦ Çڵ鸵 Çϱâ À§ÇÑ ÀÎÅÍÆäÀ̽º class NxAsyncEventHandler { public: NxAsyncEventHandler() { } virtual ~NxAsyncEventHandler() { } virtual void HandleEvent( NxAsyncEvent* pEvent ) = 0; };