- 채널 입장 시 API 서버에서 플레이어 프로필 로드 (레벨/스탯/위치)
- 채널 퇴장 시 위치/플레이타임 DB 저장 (SaveGameDataAsync)
- Player.cs에 AttackPower/AttackRange/SprintMultiplier/Experience 필드 추가
- ToPlayerInfo에서 전투 스탯 매핑 추가
- Session에 ChannelJoinedAt 추가 (플레이타임 계산용)
- PartyUpdateType에 INVITE/KICK 추가
- RequestPartyPacket에 TargetPlayerId 필드 추가
- GameServer에 INVITE/KICK 핸들러 구현
- Channel에 GetPeer() 메서드 추가
- RestApi에 GetPlayerProfileAsync/SaveGameDataAsync 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- VerifyTokenAsync 인증 우회 차단 (빈 문자열→null 반환)
- HandleAuth/OnIntoBossRaid async void→async Task 전환
- await 후 스레드 안전성 확보 (sessionLock 도입)
- 보스레이드 파티원 세션/토큰 개별 전달 (tokens Dictionary 타입 수정)
- 409 Conflict 처리 추가, bossId 하드코딩 제거
- 채널 이동 시 레이드 맵 해제, 플레이어 상태 보존
- 파티원 닉네임 손실 수정, HandlePartyLeaveOnExit 알림 타입 수정
- PacketCode enum 명시적 값 할당, MaplId→MapId/BossRaidAccesss→Access 오타 수정
- Channel.UserCount 음수 방지, HandleAuth 재연결 로직 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- RestApi.cs: Tokens를 Dictionary<string, string>?으로 수정
- BossRaidResult.cs: Tokens를 Dictionary<string, string>?으로 수정
- GameServer.cs: SendTo(peer) → SendTo(memberPeer) 버그 수정,
각 파티원에게 개별 토큰 전송
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. PlayerId 스푸핑 방지: OnTransformPlayer, OnActionPlayer, OnStatePlayer에서
브로드캐스트 전 packet.PlayerId = hashKey로 강제 교체
2. HP/MP 클라이언트 조작 방지: OnStatePlayer에서 범위 클램핑
(0 ≤ Hp ≤ MaxHp, 0 ≤ Mp ≤ MaxMp)
3. CreateParty 파티원 등록 누락 수정:
- memberIds 파라미터 사용 시 모든 멤버를 playerPartyMap에 등록
- 리더 중복 추가 방지 (Contains 체크)
4. OnIntoChannel 채널 만석 유령 상태 방지:
이전 채널 제거 후 새 채널 입장 실패 시 이전 채널로 복귀
5. HandleAuth async 경합 방지:
authenticatingTokens HashSet으로 동일 토큰 동시 인증 차단
6. 레이드 맵 미반환 수정:
TryReleaseRaidMap 헬퍼 추가, OnChangeMap/OnSessionDisconnected에서
레이드 맵(1001+) 유저 0명 시 인스턴스 맵 해제
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- RestApi에 보스레이드 입장/검증/시작/완료/실패 엔드포인트 추가
- GameServer에 보스레이드 흐름 처리 로직
- Player 모델에 보스레이드 상태 필드 추가
- 보스레이드 관련 패킷 정의
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ARepository 전체 메서드 IDbConnection using 추가 (커넥션 풀 누수)
- GameServer NotImplementedException → 로그 출력으로 변경
- ServerBase Auth/Echo payload 길이 검증 주석 해제
- PacketSerializer MemoryStream using 추가 (양쪽 솔루션)
- PacketSerializer size 파라미터 제거, 자동 계산 + size 검증 구현
- ServerBase NetDataWriter cachedWriter 재사용 (GC 압력 감소)
- ServerBase isListening volatile 추가
- ServerBase Deserialize 실패 시 null payload 체크
- ServerBase Serilog 구조적 로깅 템플릿 구문 수정
- TestHandler 전체 메서드 try-catch 추가
- TestRepository IDbConnectionFactory 인터페이스로 변경
- DummyClients BodyLength 계산 불일치 수정
- DummyClients pendingPings 메모리 누수 방지
- EchoClientTester async void 이벤트 → 동기 Cancel()로 변경
- ANALYSIS.md 코드 분석 및 문제점 보고서 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>