From d05f7da16901afee647b9a8e990eaae94f1a8e81 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Thu, 15 Jul 2021 15:50:53 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9socket=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E9=80=BB=E8=BE=91,=20=E5=A2=9E=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E6=9C=AA=E5=A4=84=E7=90=86=E4=BA=8B=E4=BB=B6=E7=9A=84=E8=AD=A6?= =?UTF-8?q?=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/api/socket.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/shared/api/socket.ts b/shared/api/socket.ts index 4d864634..34bb3460 100644 --- a/shared/api/socket.ts +++ b/shared/api/socket.ts @@ -23,7 +23,22 @@ type SocketEventRespones = * 封装后的 Socket */ export class AppSocket { - constructor(private socket: Socket) {} + listener: [string, (data: unknown) => void][] = []; + + constructor(private socket: Socket) { + socket.onAny((eventName: string, data: unknown) => { + const matched = this.listener.filter(([ev]) => ev === eventName); // 匹配到的监听器列表 + if (matched.length === 0) { + // 没有匹配到任何处理函数 + console.warn(`[Socket IO] Unhandler event: ${eventName}`); + return; + } + + matched.forEach(([, cb]) => { + cb(data); + }); + }); + } get connected(): boolean { return socket.connected; @@ -44,8 +59,11 @@ export class AppSocket { }); } + /** + * 监听远程通知 + */ listen(eventName: string, callback: (data: T) => void) { - this.socket.on(`notify:${eventName}`, callback); + this.listener.push([`notify:${eventName}`, callback as any]); } }