2024-12-10 CH-6 최종 프로젝트 11 게임 재접속 기능 설계 및 진행 상황

MOON·2024년 12월 29일
0

내일배움캠프 과제

목록 보기
45/48

오늘은 재접속 기능이 있으면 좋을 것 같다는 의견이 있어서 제가 담당하여 진행해 보기로 했습니다.

재접속 상황

  1. 로그인시 redis에 정보가 저장 되어있는지 체크 있으면 게임 정보를 찾아 옵니다.
  2. 찾아온 유저 정보를 통해 해당 게임 세션이 현재도 실행 중인지 체크합니다.
  3. 실행 중이면 바로 접속하게 response를 날려 접속을 유도합니다.
  4. 해당 재접속된 플레이어는(관전 모드)상태로 해당 스테이지에는 죽음 상태로 있습니다. // 게임 상태 체크에 따라 접속 상황이 바뀜

문제 : 여기에 해당 게임 세션이 진행 중인 것을 확인 할 수 있는가? (session 서버 확인해 봐야 할 것 같다)

방안 1

  • 또는 방생성할떄 여기 session서버에서 게임 세션 정보도 관리하면 가능해 보인다.
  • 방생성 할떄 게임 서버 요청 -> 메인 서버 게임 세션 저장
  • 게임 종료시 게임 서버 요청 -> 메인 서버 저장된 게임 세션 삭제

방안 2

  • 세션에 대한 정보는 redis에 저장해 두고 있으면 문제는 쉽게 해결되 보인다.
  • 방생성 할떄 redis에 게임 id, invitecode, state 저장해 두고
  • 게임 종료시 삭제를 게임 서버 자체에서 하면 될 것 같기도 하고
  • 그리고 해당 redis에 저장되어 있는 정보를 토대로 해당 게임이 진행되고 있는지 확인하면 될 것 같다.

방안 3

  • 새로운 방법 : 클라이언트에서 게임 서버를 연결 할때 게임 서버 세션에서 확인한다.
  • 현재 연결방식 방 생성, 방 참가일때 게임 서버와 연결이 된다. 이 방식으로 가면 안되고 로그인이 되거나 또는 따로 게임 서버 연결을 시도를 하고 요청이 있어야 된다.

팀원들과 논의하여 방안 2 방법으로 결정하였습니다.

구현시작

현재 redis에 저장된 정보

  • 유저 정보 : key: userId, value: gameId - hset으로 저장 및 관리
  • 게임 정보 : key: gameId, value: inviteCode, state - hset으로 저장 및 관리

진행 상황

  1. 게임 서버에서 방 생성 요청시 생성된 게임 세션을 redis에 게임 세션 정보 저장
  2. 로그인 시 redis에 저장된 유정 정보를 조회하여 gameId 조회
  3. gameId를 통해 redis에서 게임 정보 조회
  4. 조회된 게임 세션 정보가 있으면 조회된 inviteCode 로그인 패킷 명세에 추가하여 전달
  5. 조회된 게임 세션 정보가 없으면 로그인 패킷 명세에 inviteCode: ‘none’으로 추가하여 전달 예정
  6. 클라이언트는 inviteCode가 있으면 게임 서버와 연결 후 바로 해당 게임 세션으로 참여
  7. 클라이언트는 inviteCode가 없으면 원래대로 진행!

> 이제 재접속 기능 추가시 클라이언트분들과 상의필요!

오늘의 회고
지금 상황이 아직 재접속기능을 추가할 단계는 아닌것 같네요. 다른 여러 버그와 필수로 추가해야될 기능들도 많이 있어서 추후 시간이 있다면 추가될 것 같습니다. 과연... 그래도 나름 설계하는 단계에서 게임의 흐름에 대해 다시 한번 생각해보는 시간이였습니다. 굿

오늘도 화이팅!

profile
안녕하세요

0개의 댓글

관련 채용 정보