@@ -911,33 +911,37 @@ export function useSoloGameFlow(gameStore, uiCallbacks = {}) {
911911
912912 if ( ! gameStore ) return
913913
914+ // playerResults가 없거나 빈 배열이면 콜백을 호출하지 않음
915+ if ( ! message . playerResults || ! Array . isArray ( message . playerResults ) || message . playerResults . length === 0 ) {
916+ console . warn ( '[Solo Flow] 게임 종료 메시지에 playerResults가 없거나 빈 배열임, 콜백 호출하지 않음' )
917+ return
918+ }
919+
914920 // 모든 타이머 정리
915921 clearTimerInterval ( )
916922 clearTransitionInterval ( )
917923
918924 // 백엔드에서 받은 최종 결과 데이터 매핑 (gameStore에 저장하지 않고 콜백으로 전달)
919- let finalGameResult = null
920- if ( message . playerResults && Array . isArray ( message . playerResults ) ) {
921- // PlayerFinalResult를 게임 결과 형식에 맞게 매핑
922- const playerResults = message . playerResults . map ( player => ( {
923- playerId : player . playerId ,
924- nickname : player . nickname || '알 수 없음' ,
925- markerImageUrl : player . markerImageUrl || null ,
926- totalScore : player . totalScore != null ? Number ( player . totalScore ) : 0 ,
927- finalRank : player . finalRank != null ? Number ( player . finalRank ) : 0 ,
928- earnedPoint : player . earnedPoint != null ? Number ( player . earnedPoint ) : 0
929- } ) )
930-
931- finalGameResult = {
932- gameId : message . gameId != null ? Number ( message . gameId ) : null ,
933- message : message . message || '' ,
934- timestamp : message . timestamp != null ? Number ( message . timestamp ) : Date . now ( ) ,
935- playerResults : playerResults
936- }
925+ // playerResults가 유효한 경우에만 finalGameResult 생성
926+ const playerResults = message . playerResults . map ( player => ( {
927+ playerId : player . playerId ,
928+ nickname : player . nickname || '알 수 없음' ,
929+ markerImageUrl : player . markerImageUrl || null ,
930+ totalScore : player . totalScore != null ? Number ( player . totalScore ) : 0 ,
931+ finalRank : player . finalRank != null ? Number ( player . finalRank ) : 0 ,
932+ earnedPoint : player . earnedPoint != null ? Number ( player . earnedPoint ) : 0
933+ } ) )
934+
935+ const finalGameResult = {
936+ gameId : message . gameId != null ? Number ( message . gameId ) : null ,
937+ message : message . message || '' ,
938+ timestamp : message . timestamp != null ? Number ( message . timestamp ) : Date . now ( ) ,
939+ playerResults : playerResults
937940 }
938941
939942 // UI 콜백: 게임 종료 화면 표시 (finalGameResult 데이터 전달)
940- if ( callbacks . onGameFinish ) {
943+ // finalGameResult가 null이 아니고 playerResults가 있는 경우에만 호출
944+ if ( callbacks . onGameFinish && finalGameResult ) {
941945 callbacks . onGameFinish ( finalGameResult )
942946 }
943947 }
0 commit comments