feat: 安装 mitt 并创建 sseBus 类型化事件总线
This commit is contained in:
40
src/stores/sseBus.ts
Normal file
40
src/stores/sseBus.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
// webgame-frontend/src/stores/sseBus.ts
|
||||
import mitt from 'mitt'
|
||||
import type { RoomItem } from '@/api/modules/game'
|
||||
|
||||
/**
|
||||
* SSE 推送事件类型映射
|
||||
*
|
||||
* 每个事件类型对应一个数据类型,类型安全。
|
||||
* connected / error 由 useSse 连接管理发出,其余由服务端 SSE 事件映射而来。
|
||||
*/
|
||||
type SseEvents = {
|
||||
/** SSE 连接成功 */
|
||||
connected: void
|
||||
/** SSE 连接异常 */
|
||||
error: { message: string; retryCount: number }
|
||||
/** 新房间创建 */
|
||||
room_created: RoomItem
|
||||
/** 房间状态更新 */
|
||||
room_updated: RoomItem
|
||||
/** 房间移除 */
|
||||
room_removed: { roomId: string }
|
||||
/** 被踢出房间 */
|
||||
kicked: { roomId: string }
|
||||
/** 所在房间游戏开始 */
|
||||
game_started: { roomId: string }
|
||||
/** 余额变动 */
|
||||
balance_chg: { balance: number; delta: number }
|
||||
}
|
||||
|
||||
/**
|
||||
* 全局 SSE 事件总线(发布-订阅模式)
|
||||
*
|
||||
* 示例:
|
||||
* ```ts
|
||||
* import { sseBus } from '@/stores/sseBus'
|
||||
* const off = sseBus.on('room_updated', (room) => { ... })
|
||||
* onUnmounted(off)
|
||||
* ```
|
||||
*/
|
||||
export const sseBus = mitt<SseEvents>()
|
||||
Reference in New Issue
Block a user