2025년 2월 28일

김동환·2025년 2월 28일

Today I Learned (TIL) - WebSocket Gateway for Mafia Game

WebSocket을 활용한 마피아 게임 게이트웨이 구현

오늘은 마피아 게임에서 WebSocket을 활용한 게이트웨이 기능을 구현했다. 주요 기능은 다음과 같다.


1. 게임 종료 이벤트 처리

  • 클라이언트가 endGame 이벤트를 보내면 GameService.endGame을 호출하여 게임을 종료한다.
  • 종료된 게임의 결과를 RoomEvents.GAME_END 이벤트로 브로드캐스트한다.
  • 처리 중 오류 발생 시 클라이언트에게 에러 메시지를 전송한다.

2. 밤 행동 처리

2.1 마피아 타겟 선택 (ACTION:MAFIA_TARGET)

  • 마피아가 공격할 대상을 선택하면 GameService.selectMafiaTarget을 호출한다.
  • GameService.setNightActionComplete를 통해 마피아의 밤 행동 완료 상태를 저장한다.
  • 모든 밤 행동이 완료되었는지 확인하고, 완료되었을 경우 GameService.triggerNightProcessing을 호출한다.

2.2 경찰 조사 (ACTION:POLICE_TARGET)

  • 경찰이 조사할 대상을 선택하면 GameService.savePoliceTarget을 호출한다.
  • GameService.setNightActionComplete를 통해 경찰의 밤 행동 완료 상태를 저장한다.
  • 모든 밤 행동이 완료되었는지 확인하고, 완료되었을 경우 GameService.triggerNightProcessing을 호출한다.

2.3 의사 보호 (ACTION:DOCTOR_TARGET)

  • 의사가 보호할 대상을 선택하면 GameService.saveDoctorTarget을 호출한다.
  • GameService.setNightActionComplete를 통해 의사의 밤 행동 완료 상태를 저장한다.
  • 모든 밤 행동이 완료되었는지 확인하고, 완료되었을 경우 GameService.triggerNightProcessing을 호출한다.

3. 경찰 조사 결과 요청 (REQUEST:POLICE_RESULT)

  • 경찰이 조사한 결과를 요청하면 GameService.getPoliceResult를 호출하여 결과를 가져온다.
  • 조사 대상이 없거나 경찰이 존재하지 않을 경우 에러 메시지를 클라이언트에게 전송한다.
  • 조사 결과를 RoomEvents.POLICE_RESULT 이벤트로 클라이언트에게 전송한다.

4. 밤 결과 처리 (PROCESS:NIGHT_RESULT)

  • GameService.isNightResultProcessed를 호출하여 이미 결과가 처리되었는지 확인한다.
  • 밤의 결과를 GameService.processNightResult를 통해 처리하고, GameService.setNightResultProcessed를 호출하여 중복 실행을 방지한다.
  • 결과를 RoomEvents.ROOM_NIGHT_RESULT 이벤트로 브로드캐스트한다.
  • 게임 종료 여부를 GameService.checkEndGame을 통해 확인하고, 게임이 종료되었다면 GameService.endGame을 호출한다.
  • 게임이 계속 진행될 경우 10초 후 GameService.startDayPhase를 호출하여 낮 단계로 전환한다.

정리

이번 작업을 통해 WebSocket 기반의 마피아 게임에서 밤 행동과 게임 종료 로직을 안정적으로 처리할 수 있도록 구성했다. 각 역할(마피아, 경찰, 의사)의 행동이 완료되었는지 체크하고, 모든 행동이 끝나면 자동으로 밤 결과 처리를 수행하도록 구현했다. 또한, 경찰 조사 결과 요청 및 게임 종료 처리 로직도 추가하여 전반적인 게임 흐름을 정리했다.

profile
Node.js 7기

0개의 댓글