CH5 개인과제가 마무리 되었다.
오늘은 해당하는 과제의 내용을 기술하며,
자연스럽게 과제 중에 발생한 트러블에 대한 내용도 TIL로 작성하려고 한다.
DB 동기화
지금까지 prisma 를 사용하거나 또는 직접 DB를 수정했다면
이제는 .query 메소드를 사용하여 접근한다.
updateUserLocation 함수가 실행되면, query 메소드를 통해
해당하는 DB의 데이터를 수정할 수 있다.
query의 첫번째 인자로 쿼리문이 들어가며, 두번째 인자로 ?에 들어갈 변수를 넣어주면 된다.
(꼭, ? 와 인자를 잘 대칭되게 맞춰주자 !)
위 updateUserLocation 이 실행되는 타이밍은...
클라이언트가 'end' 이름으로된 패킷을 보냈을 때,
onEnd 를 통해 removeUser가 실행된다.
원래 removeUser 는 유저의 접속이 종료되었을 때
세션에서 유저 데이터를 날리는 함수였는데,
같은 타이밍에 updateUserLocation 을 호출하여 자연스럽게
세션에서 삭제 및 종료 좌표를 저장하게 된다.
문제
그래서 이걸 어떻게 써먹을까?
해당 좌표를 기록하는 이유는, 클라이언트에서 접속 기록이 있는 device_id 로 접속했을 때,
이전 종료 시 기록했던 위치에서 재접속이 되도록 하기 위함이었다.
위에서 본 것처럼, DB 상에 기록은 잘 되고있고,
접속할 때, 해당 정보를 클라이언트에게 보내는 코드 또한 이미 작성했다.
이제 클라이언트에서 받아서 적용해야 하는데.....
클라이언트 쪽은 아직까지는 너무 생소하기 때문에 많이 헤매게 되었다.
이미 빌드된 클라이언트를 받았는데, 수정을 해야한다는 것 !!
우선, 수정을 위해 배포된 코드를 다시 가져와서 작업을 시작했다.
이...게.. 어느 나라 언어람
너무나도 생소한 코드지만, 강의에서 설명한 내용을 바탕으로 코드를 수정했다.
패킷을 받는 부분을 발견 !
이제, Player.cs 로 들어가서 위치 동기화를 하는 부분에,
최초 한번만 targetPosition 으로 좌료를 설정하게 만들면 끝이다.
(라고 말은 했지만 엄청 헤맸다)
targetPosition은, 서버에서 받은 x ,y 좌표를 Vector2 클래스를 이용해서 좌표화 시키는... 그런 녀석이라고 한다.
사실, 위에 부분보다 힘들었던건.
서버때와 마찬가지로 패킷을 어떻게 처리하냐는 부분이었다.
당연히, 버퍼로 보냈기 때문에 그대로 처리할 수는 없다.
우선, 패킷을 핸들러 기준으로 나누는 부분부터 수정하여, Init (최초 실행시) 에 적용되는 부분을 만들고,
Handler.InitialHandler는 기존에 있던 게임 시작 로직과 동일하며,
Packets.ParsePayload <> 를 통해, 따로 파싱이 적용되도록 만들었고,
해당 부분은 Packet.cs 의 마지막 부분에 처리하는 함수를 따로 만들어 주었다.
접속 종료했던 위치로 다시 접속한 오른쪽 캐릭터....!!
그림만 보면 잘 모르겠지만 아무튼 잘 작동한다.
'내일배움캠프' 카테고리의 다른 글
24.10.24 TIL 삼각함수 (0) | 2024.10.30 |
---|---|
24.10.24 TIL 위치 동기화 (0) | 2024.10.24 |
24.10.23 TIL 기본 세팅 (0) | 2024.10.23 |
24.10.18 TIL 버퍼 객체 (0) | 2024.10.18 |
24.10.17 TIL 검증이 뭘까 (0) | 2024.10.17 |