Skip to content

SH4MDEL/IOCP-GameServer

Repository files navigation

IOCP-GameServer

게임 서버 프로그래밍 공부 내용을 정리하기 위한 리포지토리입니다.


프로젝트 설명

1. Game Client

WinAPI를 통해 제작한 기본적인 클라이언트 프로그램입니다. 아직 서버와의 연동은 되어 있지 않습니다.

  • Client
    • 체스 판을 그립니다.
    • 체스 말 하나를 그립니다.
    • 커서 키(WASD)로 말을 상하좌우로 이동합니다.
    • 앞으로 작성할 서버 프로그램의 동작을 확인하기 위해 제작하였습니다.

2. TCP Network

프로젝트 1의 프로그램을 클라이언트와 서버 모델로 분리하였습니다.

충돌 등은 서버에서 검사하며, 클라이언트는 Non-Blocking I/O 모드를 이용해 단일 쓰레드로 제작하였습니다.

  • Client

    • 시작할 때 서버의 IP주소를 입력받습니다.
    • 키 입력을 받아 서버 프로그램에 보냅니다.
    • 서버에서 보내온 좌표로 말을 이동시킵니다.
  • Server

    • 클라이언트에서 보내온 키 입력을 받아 말의 위치를 변경합니다.
    • 변경된 위치를 클라이언트에 전송합니다.

3. Overlapped I/O Callback

프로젝트 2의 프로그램을 Overlapped I/O Callback 모델로 변경하여 다중접속이 가능하도록 구현하였습니다.

서버와 클라이언트 모두 단일 쓰레드로 제작하였습니다.

  • Client

    • 모든 클라이언트에서 다른 모든 클라이언트 말의 움직임이 보입니다.
    • 클라이언트 접속 종료 시 다른 모든 클라이언트에서 해당 말이 사라집니다.
  • Server

    • 서버는 새 클라이언트 접속 시 다음과 같은 과정을 거칩니다.
      1. 새로 접속한 클라이언트에 현재까지 접속한 모든 클라이언트의 정보를 전송합니다.
      2. 보드의 빈 공간에 새로 접속한 클라이언트를 등록합니다.
      3. 현재까지 접속한 모든 클라이언트에 새로 생성한 클라이언트의 정보를 전송합니다.
    • 서버는 기존 클라이언트 접속 종료 시 다음과 같은 과정을 거칩니다.
      1. 해당 클라이언트의 정보를 서버에서 삭제하고, 보드를 빈 칸으로 만듭니다.
      2. 접속 종료 패킷을 남은 모든 클라이언트에 전송합니다.
    • 충돌 처리를 진행합니다. 이미 플레이어가 존재하는 칸으로 다른 플레이어가 이동할 수 없습니다.

About

Repository for IOCP-based Game Server study

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published