// IOBuffer.h: interface for the CIOBuffer class. // ////////////////////////////////////////////////////////////////////// #pragma once /***************************************************************************** I/O Buffering À» À§ÇÑ Å¬·¡½º. SockÀ» ÀÌ¿ëÇØ ÆÐŶÀ» ÁÖ°í ¹ÞÀ»¶§ ÆÐŶÀÌ ÇÕÃÄ¿À°Å³ª ºÐÇÒµÇ¾î ¿Ã¶§ ±× ÆÐŶÀ» °ü¸® ¹× ó¸®ÇÒ¶§ »ç¿ëµÈ´Ù.(IOBufferÀ» »ó¼Ó¹ÞÀº PacektIOBuffer Ŭ·¡½º·Î ó¸®ÇϰÔ.. ±âº»ÀûÀ¸·Î PacketBuffer¿¡ ÀúÀåµÇ´Â ½ºÆ®¸µ(?)ÀÇ Çü½ÄÀº ´ÙÀ½°ú °°´Ù. ------------------------------------------- | Header(4Byte-PACKET_HEADSIZE) | StringData (Header Size) | ------------------------------------------- IOBufferŬ·¡½º´Â À§ÀÇ ÆÐŶÀ» ÇϳªÀÇ ¹è¿­¿¡ ¼øÂ÷ÀûÀ¸·Î ³Ö¾î ±× ÆÐŶÀ» °ü¸®ÇÑ´Ù. 2Byte´Â 65535±îÁöÀÇ ±æÀ̸¦ ó¸®ÇÑ´Ù. *****************************************************************************/ #include #include #include namespace Gammania { #define MAX_PACKETSIZE 512 #define IOBUF_DEF_SIZE MAX_PACKETSIZE*10 // IOBufferÀÇ ±âº»Å©±â ÆÐŶ 1024°³¸¸Å­ 󸮰¡´É class CIOBuffer { protected: // Head´Â ÀÐÀ» ¹öÆÛÀÇ ½ÃÀÛÀ§Ä¡. // TailÀº »ç¿ëµÇ¾îÁø ¹öÆÛÀÇ ³¡. int m_iHead,m_iTail; // »ý¼ºÇÑ ¹öÆÛÀÇ »çÀÌÁî int m_iBufSize; // »ý¼ºÇÑ ¹öÆÛÀÇ Æ÷ÀÎÅÍ. char* m_cBuf; // »ç¿ëµÈ ¹öÆÛÀÇ »çÀÌÁî À̰ªÀÌ À½¼ö¸é Over Flow.. int m_iBuffered; public: // »ç¿ëµÈ ¹öÆÛÀÇ Å©±â ±¸Çϱâ. void CalcBuffered(); // ±âŸ inline inline char* GetBuffer() { return m_cBuf; } inline void SetHead(int Head) { m_iHead = Head; CalcBuffered(); } inline int GetHead() { return m_iHead; } inline void SetTail(int Tail) { m_iTail = Tail; } inline int GetTail() { return m_iTail; } inline int GetBufSize() { return m_iBufSize; } // »ç¿ëÁßÀÎ ¹öÆÛÀÇ ¾ç inline int GetBufferUsed() { return m_iBuffered; } // ºñ¾îÀÖ´Â ¹öÆÛÀÇ ¾ç inline int GetEmptyBuffer() { return m_iBufSize - m_iBuffered; } void InitIOBuf(); // Ãß°¡ÇÑ´Ù. int Append(char* Buffer, int Size); // °¡Á®¿Â´Ù. int GetData(char* Buffer, int Size); // üũÇÑ´Ù int CheckData(int Size); void NewIOBuf(int BufSize); void DeleteIOBuf(); CIOBuffer(); virtual ~CIOBuffer(); }; class CPacketIOBuffer : public CIOBuffer { int LockHead; public: void Lock(); void UnLock(); // ÇѰ³ºÐ·®ÀÇ ÆÐŶÀ» ¾ò¾î¿Â´Ù. int GetPacket(char* Packet); CPacketIOBuffer(); virtual ~CPacketIOBuffer(); }; }