게임 서버 프로그래밍 공부 내용을 정리하기 위한 리포지토리입니다.
WinAPI
를 통해 제작한 기본적인 클라이언트 프로그램입니다. 아직 서버와의 연동은 되어 있지 않습니다.
- Client
- 체스 판을 그립니다.
- 체스 말 하나를 그립니다.
- 커서 키(WASD)로 말을 상하좌우로 이동합니다.
- 앞으로 작성할 서버 프로그램의 동작을 확인하기 위해 제작하였습니다.
프로젝트 1의 프로그램을 클라이언트와 서버 모델로 분리하였습니다.
충돌 등은 서버에서 검사하며, 클라이언트는 Non-Blocking I/O
모드를 이용해 단일 쓰레드로 제작하였습니다.
-
Client
- 시작할 때 서버의 IP주소를 입력받습니다.
- 키 입력을 받아 서버 프로그램에 보냅니다.
- 서버에서 보내온 좌표로 말을 이동시킵니다.
-
Server
- 클라이언트에서 보내온 키 입력을 받아 말의 위치를 변경합니다.
- 변경된 위치를 클라이언트에 전송합니다.
프로젝트 2의 프로그램을 Overlapped I/O Callback
모델로 변경하여 다중접속이 가능하도록 구현하였습니다.
서버와 클라이언트 모두 단일 쓰레드로 제작하였습니다.
-
Client
- 모든 클라이언트에서 다른 모든 클라이언트 말의 움직임이 보입니다.
- 클라이언트 접속 종료 시 다른 모든 클라이언트에서 해당 말이 사라집니다.
-
Server
- 서버는 새 클라이언트 접속 시 다음과 같은 과정을 거칩니다.
- 새로 접속한 클라이언트에 현재까지 접속한 모든 클라이언트의 정보를 전송합니다.
- 보드의 빈 공간에 새로 접속한 클라이언트를 등록합니다.
- 현재까지 접속한 모든 클라이언트에 새로 생성한 클라이언트의 정보를 전송합니다.
- 서버는 기존 클라이언트 접속 종료 시 다음과 같은 과정을 거칩니다.
- 해당 클라이언트의 정보를 서버에서 삭제하고, 보드를 빈 칸으로 만듭니다.
- 접속 종료 패킷을 남은 모든 클라이언트에 전송합니다.
- 충돌 처리를 진행합니다. 이미 플레이어가 존재하는 칸으로 다른 플레이어가 이동할 수 없습니다.
- 서버는 새 클라이언트 접속 시 다음과 같은 과정을 거칩니다.