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 |   45 +++++++++++++++++++++++++++------------------
 1 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/src/utils/sse/SSEClient.ts b/src/utils/sse/SSEClient.ts
index 2812458..5e727f7 100644
--- a/src/utils/sse/SSEClient.ts
+++ b/src/utils/sse/SSEClient.ts
@@ -1,9 +1,10 @@
 import type { AxiosRequestConfig } from 'axios';
-import { EventSourcePolyfill } from 'event-source-polyfill';
 import { accessSessionKey } from '../request';
 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;
@@ -29,22 +30,39 @@
 	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 = {}) {
 		// 璁剧疆榛樿鍊�
 		this.options = {
 			retryDelay: 1000,
 			autoReconnect: true,
-			timeout: 24 * 60 * 60 * 1000,
+			timeout: 3000,
 			headers: {
 				[SESSION_KEY]: Local.get(accessSessionKey),
 			},
 			...options,
 		};
+	}
+
+	/**
+	 * 璁㈤槄娑堟伅
+	 */
+	subscribe(handler: MessageHandler): void {
+		this.messageHandlers.add(handler);
+	}
+
+	/**
+	 * 鍙栨秷璁㈤槄娑堟伅
+	 */
+	unsubscribe(handler: MessageHandler): void {
+		this.messageHandlers.delete(handler);
 	}
 
 	/**
@@ -58,19 +76,13 @@
 
 			// 鍒涘缓 AbortController 鐢ㄤ簬瓒呮椂鎺у埗
 			// this.abortController = new AbortController();
-
 			// 鍒涘缓 EventSource 骞舵坊鍔� headers
-			this.eventSource = new EventSourcePolyfill(fullUrl, {
-				headers: this.options.headers,
-				heartbeatTimeout: this.options.timeout,
-				
-			});
+			this.eventSource = new EventSource(fullUrl);
 
 			// 缁戝畾浜嬩欢澶勭悊
 			this.bindEvents();
 		} catch (error) {
 			console.log('catch error');
-			await this.debounceHandleError.call(this, error);
 		}
 	}
 
@@ -81,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);
 				// 妫�鏌ユ槸鍚︽槸缁撴潫鏍囪
@@ -93,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);
@@ -101,9 +117,7 @@
 		};
 
 		this.eventSource.onerror = async (error) => {
-			console.log('on error');
-
-			await this.debounceHandleError.call(this, error);
+			Logger.error('eventSource onerror锛歕n\n'+ error);
 		};
 	}
 
@@ -111,7 +125,6 @@
 	 * 閿欒澶勭悊
 	 */
 	private async handleError(error: any): Promise<void> {
-		console.log('馃殌 ~ error:', error);
 		this.callbacks.onError?.(error);
 		if (this.options.autoReconnect) {
 			this.callbacks.onRetry?.();
@@ -124,10 +137,6 @@
 			this.disconnect();
 		}
 	}
-
-	private debounceHandleError = debounce((error: any) => {
-		this.handleError(error);
-	}, 500);
 
 	/**
 	 * 鏂紑杩炴帴

--
Gitblit v1.9.3