diff --git a/src/App.vue b/src/App.vue index c2bda0f..93f6c8c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -9,7 +9,7 @@ import { watch } from 'vue' import { RouterView } from 'vue-router' import { ElConfigProvider } from 'element-plus' import zhCn from 'element-plus/es/locale/lang/zh-cn' -import { useSse } from '@/common/hooks/useSse' +import { useSse } from '@/common/sse' import { useAccountStore } from '@/stores/modules/account' const accountStore = useAccountStore() diff --git a/src/common/sse/index.ts b/src/common/sse/index.ts new file mode 100644 index 0000000..b59d3cb --- /dev/null +++ b/src/common/sse/index.ts @@ -0,0 +1,2 @@ +export * from './useSse.ts' +export * from './sseBus.ts' diff --git a/src/stores/sseBus.ts b/src/common/sse/sseBus.ts similarity index 100% rename from src/stores/sseBus.ts rename to src/common/sse/sseBus.ts diff --git a/src/common/hooks/useSse.ts b/src/common/sse/useSse.ts similarity index 62% rename from src/common/hooks/useSse.ts rename to src/common/sse/useSse.ts index f4bb0cf..b0a9d58 100644 --- a/src/common/hooks/useSse.ts +++ b/src/common/sse/useSse.ts @@ -1,8 +1,8 @@ import { ref } from 'vue' -import { SseClient } from '@/common/sse/SseClient' -import type { SseEvents } from '@/stores/sseBus' -import { sseBus } from '@/stores/sseBus' -import { useAccountStore } from '@/stores/modules/account' +import { SseClient } from './SseClient.ts' +import type { SseEvents } from './sseBus.ts' +import { sseBus } from './sseBus.ts' +import { useAccountStore } from '@/stores' /** SSE 连接 URL */ const SSE_URL = '/api/sse/subscribe' @@ -14,30 +14,26 @@ let isRefreshing = false const isConnected = ref(false) -const client = new SseClient( - SSE_URL, - () => useAccountStore().accessToken, - { - onConnected() { - isConnected.value = true - sseBus.emit('connected', undefined) - }, - onMessage(event: string, data: string) { - try { - const payload = JSON.parse(data) - sseBus.emit(event as keyof SseEvents, payload) - } catch { - console.warn('[SSE] 事件数据解析失败:', event, data) - } - }, - onError(message: string) { - sseBus.emit('error', { message, retryCount: 0 }) - }, - onUnauthorized() { - void refreshTokenAndReconnect() +const client = new SseClient(SSE_URL, () => useAccountStore().accessToken, { + onConnected() { + isConnected.value = true + sseBus.emit('connected', undefined) + }, + onMessage(event: string, data: string) { + try { + const payload = JSON.parse(data) + sseBus.emit(event as keyof SseEvents, payload) + } catch { + console.warn('[SSE] 事件数据解析失败:', event, data) } + }, + onError(message: string) { + sseBus.emit('error', { message, retryCount: 0 }) + }, + onUnauthorized() { + void refreshTokenAndReconnect() } -) +}) // ==================== Token 刷新 ==================== diff --git a/src/components/baseLayouts/Lobby.vue b/src/components/baseLayouts/Lobby.vue index cf52b05..5beb886 100644 --- a/src/components/baseLayouts/Lobby.vue +++ b/src/components/baseLayouts/Lobby.vue @@ -52,7 +52,7 @@ import type { RoomItem } from '@/api/modules/game' import { useBaseLayoutStore } from '@/stores' import { storeToRefs } from 'pinia' import { getRoomList, joinRoom } from '@/api/modules/game' -import { sseBus } from '@/stores/sseBus' +import { sseBus } from '@/common/sse' import { ElMessage } from 'element-plus' /** 状态筛选选项 */