관리 메뉴

有希

RecvBuffer 본문

프로그래밍/C# 게임서버

RecvBuffer

有希. 2021. 9. 17. 19:47

Buffer에는 맨날 보던 capacity, size등의 속성이 있는데, 이를 적절히 빠진것 들을 구현해 줘야 한다.

ArraySegment를 이용하면 Count와 같은 size는 자동으로 주지면 readPos, writePos와 같은 것들은 구현되어 있지 않다.(Java에서는 따로 있던거 같은데 기억이 잘..^^) 이를 int로 선언해주고

읽어야 하는 사이즈, 쓸 수 있는 사이즈를 알 수 있도록

DataSize, FreeSize를 선언해주고 프로퍼티로 writePos-readPos, buffer.Count - writePos를 get해주면 된다. 왜 그런지는 버퍼 그림을 그리고 채워넣는 것을 생각해보면 될듯.

readPos, writePos는 이 상태로라면 계속 증가하기만 하므로 초기화 하는 함수도 하나 필요하다.

초기화 하는 함수는 다음과 같이 만들 수 있다.

DataSize가 0일 경우에는 앞으로 들어오는 데이터만 새로 읽으면 되니, 이전 값들을 밀면 된다. r/w pos 모두 0으로.

아닐 경우에는, readPos - writePos 사이에 있는 데이터를 idx=0으로 땡겨주고 writePos도 이전 dataSize로 바꿔준다. writePos뒤에 있는 데이터는 어쩌냐?는 생각을 했었는데, writePos는 여기서부터 쓴다는 의미이므로 writePos부터는 데이터가 없다. 그러니 걱정할 필요 없음.

 

'프로그래밍 > C# 게임서버' 카테고리의 다른 글

Packet Generator  (0) 2021.09.17
Packet Serialization  (0) 2021.09.17
Connector  (0) 2021.09.17
Session#4  (0) 2021.09.09
Session#3  (0) 2021.09.09