From a762b59c2c4b459f72ede19716d476bb3513f622 Mon Sep 17 00:00:00 2001 From: gerson <1405270578@qq.com> Date: 星期四, 20 二月 2025 08:27:57 +0800 Subject: [PATCH] 获取位置 --- src/utils/sse/SSEClient.ts | 28 +++++++++++++++++++++++++--- 1 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/utils/sse/SSEClient.ts b/src/utils/sse/SSEClient.ts index e277c30..5e727f7 100644 --- a/src/utils/sse/SSEClient.ts +++ b/src/utils/sse/SSEClient.ts @@ -3,6 +3,8 @@ import { SESSION_KEY } from '../request'; import { Local } from '../storage'; import { debounce } from 'lodash-es'; +import { Logger } from '/@/model/logger/Logger'; + export interface SSEOptions { /** 閲嶈瘯寤惰繜(ms) */ retryDelay?: number; @@ -28,10 +30,13 @@ onRetry?: () => void; } +export type MessageHandler = (data: any) => void; + export class SSEClient { private eventSource: EventSource | null = null; private reconnectTimeout: number | null = null; private abortController: AbortController | null = null; + private messageHandlers: Set<MessageHandler> = new Set(); constructor(private url: string, private options: SSEOptions = {}, private callbacks: SSEEventCallbacks = {}) { // 璁剧疆榛樿鍊� @@ -44,6 +49,20 @@ }, ...options, }; + } + + /** + * 璁㈤槄娑堟伅 + */ + subscribe(handler: MessageHandler): void { + this.messageHandlers.add(handler); + } + + /** + * 鍙栨秷璁㈤槄娑堟伅 + */ + unsubscribe(handler: MessageHandler): void { + this.messageHandlers.delete(handler); } /** @@ -74,11 +93,12 @@ if (!this.eventSource) return; this.eventSource.onopen = () => { - console.log('杩炴帴鎴愬姛'); + Logger.info('eventSource onopen锛氳繛鎺ユ垚鍔�'); this.callbacks.onOpen?.(); }; this.eventSource.onmessage = (event) => { + Logger.info('eventSource onmessage锛歕n\n'+ event.data); try { const data = JSON.parse(event.data); // 妫�鏌ユ槸鍚︽槸缁撴潫鏍囪 @@ -86,6 +106,9 @@ this.disconnect(); return; } + // 閫氱煡鎵�鏈夎闃呰�� + this.messageHandlers.forEach(handler => handler(data)); + // 璋冪敤鍘熸湁鐨勫洖璋� this.callbacks.onMessage?.(data); } catch (error) { console.error('Failed to parse SSE data:', error); @@ -94,6 +117,7 @@ }; this.eventSource.onerror = async (error) => { + Logger.error('eventSource onerror锛歕n\n'+ error); }; } @@ -113,8 +137,6 @@ this.disconnect(); } } - - /** * 鏂紑杩炴帴 -- Gitblit v1.9.3