2024 컴퓨터공학과 캡스톤디자인 - Next Reality

사용자 행동에 따른 로그 정의

먼저, 플레이어의 어떤 행동을 동기화해야 하는지 정의했음 (초안)


사용자 이동 로그 :

  • 사용자 아이디
  • 이동한 위치
  • 해당 위치에서 트랜스폼

사용자 상호작용 로그 (request):

  • 사용자 아이디
  • 대상 종류 (시스템/다른 사용자/오브젝트)
  • 대상 ID
  • 실행하려고 한 상호작용 ID

사용자 상호작용 로그 (response) request 승인 시 브로드캐스트 :

  • 사용자 아이디
  • 대상 종류 (시스템/다른 사용자/오브젝트)
  • 대상 ID
  • 실행하려고 한 상호작용 ID

사용자 상호작용 로그 (response) request 실패 시 설치 요청한 유저에게만 :

  • 실패 이유

에셋 설치 (request) :

  • 사용자 아이디
  • 고유 에셋 아이디
  • 트랜스폼

에셋 설치 (response) request 승인 시 브로드캐스트

  • 사용자 아이디
  • 고유 에셋 아이디
  • 오브젝트 아이디
  • 트랜스폼

에셋 설치 (response) request 실패 시 설치 요청한 유저에게만 :

  • 실패 이유

에셋 삭제 (request) :

  • 사용자 아이디
  • 오브젝트 아이디

에셋 삭제 (response) request 승인 시 브로드캐스트 :

  • 사용자 아이디
  • 오브젝트 아이디

에셋 삭제 (response) request 실패 시 삭제 요청한 유저에게만 :

  • 실패 이유

에셋 변경 (request) :

  • 사용자 아이디
  • 오브젝트 아이디
  • 변경 전 트랜스폼 (희망사항)
  • 변경 후 트랜스폼

에셋 변경 (response) request 승인 시 브로드캐스트 :

  • 사용자 아이디
  • 오브젝트 아이디
  • 변경 후 트랜스폼

에셋 변경 (response) request 실패 시 삭제 요청한 유저에게만 :

  • 실패 이유

접속 플레이어 목록 관리 방안

  1. 접속하려는 플레이어가 서버에 로그를 날림 (접속 or 퇴장)
  2. 서버가 승인 or 반려 (퇴장은 해당사항 X)
  3. 승인하면 서버의 플레이어 리스트에 접속 신청 유저 아이디를 추가 or 삭제
  4. 이후 플레이어의 로그를 해당 방에 접속한 모든 플레이어에게 브로드캐스트

서버에 날라오는 모든 로그의 유효성 검사할 때 플레이어 리스트에서 확인
(ex. 에셋 생성 로그를 받았는데 보낸 플레이어가 서버 플레이어 리스트에 없으면 거부)

로그 템플릿 정의

커맨드$메시지;메시지;메시지;… 형태로 제작 해당 로그 템플릿을 스키마라고 이름붙임

ex. PlayerJoin$sendUserId;SendTime;SendUserNickname;MapId;SendUserIP:Port;

메시지는 커맨드의 종류에 따라 달라질 수 있음

최종 스키마 목록

커맨드명역할
PlayerJoin
플레이어 입장
PlayerLeave
플레이어 퇴장
PlayerMove
플레이어 이동
AssetCreate
에셋 설치
AssetMove
에셋 이동
AssetDelete
에셋 삭제
AssetSelect
에셋 선택
AssetDeselect
에셋 선택 해제
MapReady
맵 데이터 수신 완료 확인용
PlayerJump
플레이어 점프
ManagerEdit
권한 변경
MapInit맵 초기화