구현 기능
유저 관리
토큰 로그인
로그인 화면에서 터치 시, 토큰 로그인을 시도합니다.
토큰 로그인이 성공할 경우, 로딩씬으로 이동합니다.
토큰 로그인이 실패할 경우, 수동 로그인을 할 수 있도록 로그인 버튼을 활성화 합니다.
커스텀 로그인 / 회원가입
UI 창에서 입력된 아이디와 비밀번호를 이용하여 로그인/회원가입을 진행합니다.
응답이 실패했을 경우, 각 상황에 맞게 메시지를 가공하여 보여줍니다.
닉네임
닉네임 수정을 통해 닉네임 중복 확인과 수정을 동시에 진행합니다.
409 중복 에러를 통해 중복을 체크합니다.
로그인 이후 닉네임이 없을 경우에도, 닉네임을 수정할 수 있도록 UI를 보여줍니다.
정책
서비스 이용약관과 개인보호처리방침에 대한 UI가 구현되어 있습니다.
뒤끝 > 정책 관리에서 설정이 가능합니다.
입력이 안되어 있을 경우에는 null이 반환되며 이에 맞게 메시지를 가공하여 보여줍니다.
차트
차트에 대한 정보를 파싱할 수 있도록 BackendData.Chart 네임스페이스에 차트별 클래스가 정의되어 있습니다.
각 클래스에는 부모 객체로 BackendData.Base.Chart를 가지고 있으며 부모객체에서 BackendChartDataLoad 함수를 통해 차트를 불러오고 각 자식 클래스의 LoadChartDataTemplate(LitJson.JsonData json) 에서 각 데이터에 맞게 파싱 방법을 구성하여 공통된 로직으로 데이터를 캐싱합니다.
게임 정보
게임 정보에 대한 정보를 파싱할 수 있도록 BackendData.GameData. 네임스페이스에 테이블 이름과 동일한 클래스가 정의되어 있습니다.
각 클래스에는 부모 객체로 BackendData.Base.GameData를 가지고 있으며 부모객체에서 BackendGameDataLoad 함수를 통해 게임 정보를 불러오고 각 자식 클래스의 SetServerDataToLocal(LitJson.JsonData gameDataJson) 에서 각 데이터에 맞게 파싱 방법을 구성하여 공통된 로직으로 데이터를 캐싱합니다.
만약 불러온 데이터가 존재하지 않을 경우, InitializeData를 호출하여 로컬 데이터를 초기화하고 데이터를 새로 Insert합니다.
트랜잭션
로딩씬에서 트랜잭션 읽기 함수를 수행합니다.
만약 읽어올 게임 정보 클래스중에 에러가 발생하는 테이블이 존재한다면(해당 테이블에 데이터가 존재하지 않을 경우), 개별로 GetMyData 함수를 호출하여 개별로 데이터를 조회합니다.
자동 저장
BackendManager에서 UpdateGameDataTransaction함수를 통해 300초마다 데이터를 저장하는 함수를 호출합니다.
각 게임 정보를 담당하는 클래스에서 변경된 값이 있는지 확인하고 변경된 값이 없다면 저장하지 않고, 데이터가 하나만 존재한다면 Backend.GameData.UpdateV2() 함수를 호출하고, 여러개 존재한다면 트랜잭션 리스트에 추가하여 TransactionWriteV2함수로 호출합니다.
유저 랭킹
로딩씬에서 모든 랭킹 리스트를 불러와 캐싱합니다.
랭킹 UI를 생성할 때, 캐싱된 랭킹 리스트에서 각 랭킹의 랭킹명을 가져와 버튼으로 보여줍니다.
각 버튼을 클릭할때마다 해당 랭킹의 uuid로 랭킹 유저 리스트 불러오기 함수를 호출하며 호출한 시간을 캐싱합니다.
만약 캐싱된 호출 시간과 현재 시간이 10분 이상 차이가 발생하지 않았다면 캐싱된 유저 리스트를 보여줍니다.
10분 이상의 차이가 발생한다면 랭킹 유저 리스트 불러오기 함수를 호출합니다.
BackendManager에서 10분마다 각 랭킹에서 사용되는 테이블을 가져와 게임 정보를 관리하는 클래스에서 각 테이블 명과 비교하며 변경된 값이 있는지 체크하고 랭킹을 갱신합니다.
우편
로딩씬에서 관리자 우편을 불러오고 받을 우편이 하나라도 존재한다면 인게임의 우편 아이콘에 표시를 줍니다.
BackendManager 10분마다 GetAdminPostList를 호출하며 우편이 왔는지 확인합니다.
랭킹 우편의 경우, 우편 UI를 활성화할 때, 호출을 하며 활성화 당시 이전 활성화 시간과 10분 이상 차이가 나지 않는다면 캐싱된 값을 사용합니다.
게임 로그
BackendManager에서 SendBugReport()를 통해 에러에 대한 로그를 삽입합니다.
경고 UI를 생성하는 StaticManager.UI.AlertUI.OpenErrorUI() 함수에서도 해당 함수를 호출하며 에러를 수집합니다.
에러 핸들러
BackendManager에서 초기화 함수(Init)을 호출할 때 SetErrorHandler에서 프로젝트 점검, 403 에러, 다른 기기 접속 감지 핸들러를 등록합니다.
Update에서 Backend.ErrorHandler.Poll()를 지속적으로 호출하여 핸들러 내부에서도 UI에 접근할 수 있도록 설정합니다.