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 실패 시 삭제 요청한 유저에게만 :
- 실패 이유
접속 플레이어 목록 관리 방안
- 접속하려는 플레이어가 서버에 로그를 날림 (접속 or 퇴장)
- 서버가 승인 or 반려 (퇴장은 해당사항 X)
- 승인하면 서버의 플레이어 리스트에 접속 신청 유저 아이디를 추가 or 삭제
- 이후 플레이어의 로그를 해당 방에 접속한 모든 플레이어에게 브로드캐스트
서버에 날라오는 모든 로그의 유효성 검사할 때 플레이어 리스트에서 확인
(ex. 에셋 생성 로그를 받았는데 보낸 플레이어가 서버 플레이어 리스트에 없으면 거부)
로그 템플릿 정의
커맨드$메시지;메시지;메시지;… 형태로 제작 해당 로그 템플릿을 스키마라고 이름붙임
ex. PlayerJoin$sendUserId;SendTime;SendUserNickname;MapId;SendUserIP:Port;
메시지는 커맨드의 종류에 따라 달라질 수 있음
최종 스키마 목록
커맨드명 | 역할 |
---|---|
PlayerJoin | 플레이어 입장 |
PlayerLeave | 플레이어 퇴장 |
PlayerMove | 플레이어 이동 |
AssetCreate | 에셋 설치 |
AssetMove | 에셋 이동 |
AssetDelete | 에셋 삭제 |
AssetSelect | 에셋 선택 |
AssetDeselect | 에셋 선택 해제 |
MapReady | 맵 데이터 수신 완료 확인용 |
PlayerJump | 플레이어 점프 |
ManagerEdit | 권한 변경 |
MapInit | 맵 초기화 |