배경
클라이언트가 슬롯 상태를 받는 시점이 로그인(전체 스냅샷)과 배치 변경(1칸) 두 곳뿐이었다.
채취 결과(S_GatherResultResponse)에는 슬롯 상태가 없어서:
- 시각 오차가 교정되지 않았다 — 정산 후 서버의
LastTickAt이 갱신되지만 클라는 옛 값으로 외삽 - 속도 변화를 클라가 몰랐다 — 버프·스탯으로
CurrentWorkSpeed가 바뀌어도 반영 안 됨
→ GitHub 이슈 #12
결정
S_GatherResultResponse에 슬롯을 합치지 않고 별도 패킷으로 분리했다.
채취 결과는 "뭐가 나왔다"이고 슬롯 동기화는 다른 관심사다.
분리하면 정산·속도 변경·이후 새 트리거에서 모두 같은 패킷 하나로 1칸씩 내려줄 수 있다.
변경 내역
| 파일 | 변경 |
|---|---|
Server/MikaProtocol/MikaPacket.cs |
PacketId = 18, S_WorkStationSlotSyncResponse 추가 |
Server/WSGameServer/User/User.WorkStation.cs |
SettleWorkStation — 정산 후 동기화 전송. RefreshWorkStationSpeed — 전체 스냅샷 대신 바뀐 슬롯만 전송 |
Server/MikaDummyClient/Network/ServerPacketHandler.cs |
핸들러 추가 |
Assets/Scripts_Server/Network/MikaNetwork.Unity/ServerPacketHandler.cs |
이벤트 + 핸들러 추가 |
Assets/Scripts_Client/Managers/PlayerDataModel.cs |
구독 + 캐시 병합 + WorkStationSlotsChanged 발행 |
GameDesign/design/workslot/README.md |
"교정 안 됨" → "매 정산마다 교정됨" |
Assets/Scripts_Client/서버동작이해.md |
수신 패킷·수량 규칙에 반영 + 미러 재생성 명령 기록 |
완료 조건
- [x] 정산할 때마다 해당 슬롯의 최신 상태가 클라에 도착한다
- [x] 속도가 바뀔 때 바뀐 슬롯만 내려간다 (전체 스냅샷 아님)
- [x] 클라가 수신하면 캐시를 병합하고
WorkStationSlotsChanged를 발행한다 - [x] 기존 테스트 194개 전부 통과
잘려 나간 조각 — Unity 프로토콜 미러
Assets/Scripts_Server/Protocol/MikaPacket.cs가 커밋에서 빠졌다.
이 파일은 MikaProtocol 빌드 시 post-build로 sync-protocol-to-unity.ps1이 만드는 서버 생성물인데,
빌드를 돌리지 않아 서버 원본과 클라 사용처만 들어왔다. Unity가 S_WorkStationSlotSyncResponse를
못 찾아 클라 컴파일이 CS0246으로 깨진 상태다.
미러는 서버 담당 폴더라 클라가 대신 커밋하지 않는다 → T-025 로 등록.
관련
- GitHub 이슈 #12 — 미러가 들어올 때까지 열어 둔다
- T-025 — 미러 커밋 (서버)