서버에서 수신 버퍼로 사용하기 위해 RingBuffer를 구현했다.
🔁 링 버퍼( Ring Buffer )
고정 크기의 원형 큐 형태의 자료구조로, FIFO( First-In-First-Out ) 방식으로 데이터를 저장한다.
📦 구조
구성 요소 | 설명 |
buffer[] | 데이터를 담을 배열( 고정 크기 ) |
head | 데이터를 읽는 위치 |
rear | 데이터를 쓰는 위치 |
RingBuffer 클래스
#pragma once
#include <iostream>
using namespace std;
#define BUFFER_DEFAULT_SIZE 100001
#define BLANK 1
#ifdef RINGBUFFER
#define RINGBUFFER_DLL __declspec(dllexport)
#else
#define RINGBUFFER_DLL __declspec(dllimport)
#endif
// 원형 큐
class RINGBUFFER_DLL RingBuffer
{
private:
char* _buffer;
int _front;
int _rear;
int _bufferMaxSize;
bool Init(int bufferSize);
public:
RingBuffer(void);
RingBuffer(int bufferSize);
~RingBuffer();
int GetBufferSize(void);
//현재 사용하고 있는 버퍼 크기 반환
int GetUseSize(void);
//남아 있는 공간 사이즈
int GetFreeSize(void);
// 한번에 enqueue 할 수 있는 사이즈
int GetDirectEnqueueSize(void);
// 한번에 Dequeue 할 수 있는 사이즈
int GetDirectDequeueSize(void);
// 데이터 넣기
int Enqueue(char* data, int size);
// 데이터 빼기
int Dequeue(char* dest, int size);
// 데이터가 있는지 확인
int Peek(char* dest, int size);
// rear 움직이기
int MoveRear(int size);
// front 움직이기
int MoveFront(int size);
// ringbuffer 초기화
void ClearBuffer(void);
// 비어잇는지 확인
bool IsEmpty(void);
// front 위치 반환
char* GetFrontBufferPtr(void);
// rear 위치 반환
char* GetRearBufferPtr(void);
// buffer 맨앞 반환
char* GetBufferPtr(void);
};
'ChattingServer' 카테고리의 다른 글
[ChattingServer] WorkerThreadProc (0) | 2025.06.02 |
---|---|
[ChattingServer] Start 함수 (0) | 2025.06.01 |
[ChattingServer] AcceptThreadProc (0) | 2025.06.01 |
[ChattingServer] Session (0) | 2025.05.29 |
[ChattingServer] 직렬화 버퍼 (0) | 2025.05.29 |