서버에서 수신 버퍼로 사용하기 위해 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

+ Recent posts