diff --git a/frontend/src/pages/FightPage.vue b/frontend/src/pages/FightPage.vue index 2262b95..0e0d797 100644 --- a/frontend/src/pages/FightPage.vue +++ b/frontend/src/pages/FightPage.vue @@ -401,32 +401,41 @@ function connectSSE() { addSSEListener(eventSource, 'spectator_count', (e) => { try { + if (!e.data) return const data = JSON.parse(e.data) - spectatorCount.value = data.count || 0 - } catch { /* ignore */ } + if (typeof data.count === 'number') spectatorCount.value = data.count + } catch (err) { + console.warn('[SSE] spectator_count parse error:', err) + } }) addSSEListener(eventSource, 'ping', (e) => { try { - if (e.data) { - const data = JSON.parse(e.data) - if (data.spectators !== undefined) spectatorCount.value = data.spectators - } - } catch { /* ignore */ } + if (!e.data) return + const data = JSON.parse(e.data) + if (typeof data.spectators === 'number') spectatorCount.value = data.spectators + } catch (err) { + console.warn('[SSE] ping parse error:', err) + } }) addSSEListener(eventSource, 'reaction', (e) => { try { + if (!e.data) return const data = JSON.parse(e.data) - if (data.emoji && data.counts) { + if (typeof data.emoji === 'string' && data.counts) { spawnLiveReactionEmoji(data.emoji) } - } catch { /* ignore */ } + } catch (err) { + console.warn('[SSE] reaction parse error:', err) + } }) addSSEListener(eventSource, 'round_start', (e) => { try { + if (!e.data) return const data = JSON.parse(e.data) + if (!data.challenge || !data.round) return currentChallengeInfo.value = { type: data.challenge.type, label: data.challenge.label } liveLogItems.value.push({ type: 'challenge', @@ -436,12 +445,13 @@ function connectSSE() { }) scrollLiveLog() } catch (err) { - console.warn('[FightPage] SSE round_start parse failed:', err) + console.warn('[SSE] round_start parse error:', err) } }) addSSEListener(eventSource, 'human_challenge', async (e) => { try { + if (!e.data) return const sseData = JSON.parse(e.data) if (myBot.value) { const res = await fetch(`/api/fights/${fightId.value}/challenge/${myBot.value.id}`) @@ -469,6 +479,7 @@ function connectSSE() { addSSEListener(eventSource, 'round_end', (e) => { try { + if (!e.data) return const data = JSON.parse(e.data) if (data.spectators !== undefined) spectatorCount.value = data.spectators handleRoundEnd(data).catch(() => {}) @@ -479,6 +490,7 @@ function connectSSE() { addSSEListener(eventSource, 'fight_end', (e) => { try { + if (!e.data) return const data = JSON.parse(e.data) if (data.spectators !== undefined) spectatorCount.value = data.spectators handleFightEnd(data).catch(() => {})