/* ==================================================================== * ÆÄ ÀÏ : PacketPool.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : * ÀÛ ¼º ÀÏ : 09/08/24 * ÁÖÀÇ»çÇ× : * =================================================================== */ #ifndef __PACKET_POOL_H__ #define __PACKET_POOL_H__ //#ifndef WINVER //#define WINVER 0x0500 //#endif // //#ifndef _WIN32_WINNT //#define _WIN32_WINNT 0x0500 //#endif #pragma once // À©µµ¿ìÁî Çì´õ #include #include #include "iocontextpool.h" #define MAX_PACKET_BUFFER_LEN 0x100 // 0x00 ~ 0xff = 0x100 struct PacketBuffer { u_long pid; // Connection Index (Server & Channel Number) u_long seq; // Sequence Number u_long ack; // Acknowledgment Number PerIoContext* buffer[MAX_PACKET_BUFFER_LEN]; // I/O Context Buffer u_long offset; // Offset DWORD update; // Update struct PacketBuffer* next; // Linked List - next struct PacketBuffer* prev; // " - prev struct PacketBuffer* parent; // Binary Tree - Parent struct PacketBuffer* left; // " - Child, left struct PacketBuffer* right; // " - Child, right }; class PacketPool { private: PacketBuffer* mPagedPoolUsage; // ÆäÀÌÁö µÈ Ç®. PacketBuffer* mNonPagedPoolUsage; // ÆäÀÌÁö ¾ÈµÈ Ç®. PacketBuffer* mBstRoot; // BST - ·çÆ®. SIZE_T mQuotaPagedPoolUsage; // ÇöÀç ÆäÀÌÁö µÈ Ç® - »ç¿ë·®. SIZE_T mQuotaNonPagedPoolUsage; // ÇöÀç ÆäÀÌÁö ¾ÈµÈ Ç® - »ç¿ë·®. SIZE_T mWorkingSetSize; // ÇöÀç ÀÛ¾÷ ¼³Á¤Å©±â. PacketBuffer* AllocPacketBuffer ( ); void FreePacketBuffer ( PacketBuffer** packetBuffer ); int Compare ( long pid1, long pid2 ); void AttachPool ( PacketBuffer** pool, PacketBuffer* packetBuffer ); void DetachPool ( PacketBuffer** pool, PacketBuffer* packetBuffer ); bool AttachBst ( PacketBuffer* packetBuffer ); bool DetachBst ( PacketBuffer* packetBuffer ); PacketBuffer* GetPool ( long pid ); void ReleasePool ( PacketBuffer* packetBuffer ); public: PacketPool( ); void Shutdown ( ); PacketBuffer* GetPagedPoolUsage ( ) { return mPagedPoolUsage; } PacketBuffer* SearchPacketBuffer ( long pid ); PacketBuffer* GetPacketBuffer ( long pid ); void ReleasePacketBuffer ( PacketBuffer* packetBuffer ); public: virtual ~PacketPool(void); }; #endif // __PACKET_POOL_H__