Files
Client/Server/GashServer/IOBuffer.h
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

86 lines
2.2 KiB
C++

// 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 <stdio.h>
#include <stdlib.h>
#include <memory.h>
#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();
};