오늘은 마피아 게임에서 WebSocket을 활용한 게이트웨이 기능을 구현했다. 주요 기능은 다음과 같다.
endGame 이벤트를 보내면 GameService.endGame을 호출하여 게임을 종료한다.RoomEvents.GAME_END 이벤트로 브로드캐스트한다.ACTION:MAFIA_TARGET)GameService.selectMafiaTarget을 호출한다.GameService.setNightActionComplete를 통해 마피아의 밤 행동 완료 상태를 저장한다.GameService.triggerNightProcessing을 호출한다.ACTION:POLICE_TARGET)GameService.savePoliceTarget을 호출한다.GameService.setNightActionComplete를 통해 경찰의 밤 행동 완료 상태를 저장한다.GameService.triggerNightProcessing을 호출한다.ACTION:DOCTOR_TARGET)GameService.saveDoctorTarget을 호출한다.GameService.setNightActionComplete를 통해 의사의 밤 행동 완료 상태를 저장한다.GameService.triggerNightProcessing을 호출한다.REQUEST:POLICE_RESULT)GameService.getPoliceResult를 호출하여 결과를 가져온다.RoomEvents.POLICE_RESULT 이벤트로 클라이언트에게 전송한다.PROCESS:NIGHT_RESULT)GameService.isNightResultProcessed를 호출하여 이미 결과가 처리되었는지 확인한다.GameService.processNightResult를 통해 처리하고, GameService.setNightResultProcessed를 호출하여 중복 실행을 방지한다.RoomEvents.ROOM_NIGHT_RESULT 이벤트로 브로드캐스트한다.GameService.checkEndGame을 통해 확인하고, 게임이 종료되었다면 GameService.endGame을 호출한다.GameService.startDayPhase를 호출하여 낮 단계로 전환한다.이번 작업을 통해 WebSocket 기반의 마피아 게임에서 밤 행동과 게임 종료 로직을 안정적으로 처리할 수 있도록 구성했다. 각 역할(마피아, 경찰, 의사)의 행동이 완료되었는지 체크하고, 모든 행동이 끝나면 자동으로 밤 결과 처리를 수행하도록 구현했다. 또한, 경찰 조사 결과 요청 및 게임 종료 처리 로직도 추가하여 전반적인 게임 흐름을 정리했다.