From bdad4136ec61fca6c74fa6c548dd66038a86b755 Mon Sep 17 00:00:00 2001 From: MiaoWoo Date: Wed, 16 Aug 2023 11:47:36 +0800 Subject: [PATCH] fix: websocket close logic --- packages/plugin/package.json | 2 +- packages/websocket/src/client/index.ts | 4 ++-- packages/websocket/src/client/netty/index.ts | 2 +- packages/websocket/src/client/transport.ts | 12 ++++++------ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 841c3615..26af8fff 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -30,7 +30,7 @@ "@ccms/common": "^0.28.0-beta.2", "@ccms/container": "^0.28.0-beta.2", "@ccms/i18n": "^0.28.0-beta.2", - "@ccms/verify": "^0.25.1", + "@ccms/verify": "^0.26.1", "crypto-js": "^4.1.1", "js-yaml": "^4.1.0" } diff --git a/packages/websocket/src/client/index.ts b/packages/websocket/src/client/index.ts index 287fccca..68253669 100644 --- a/packages/websocket/src/client/index.ts +++ b/packages/websocket/src/client/index.ts @@ -89,11 +89,11 @@ export class WebSocket extends EventEmitter { public onclose: (event: CloseEvent) => void public onerror: (event: ErrorEvent) => void - public on(eventName: string | symbol, listener: (...args: any[]) => void): this { + public on(eventName: EventType, listener: (...args: any[]) => void): this { this.client.on(eventName, listener) return this } - public emit(eventName: string | symbol, ...args: any[]): boolean { + public emit(eventName: EventType, ...args: any[]): boolean { return this.client.emit(eventName, ...args) } diff --git a/packages/websocket/src/client/netty/index.ts b/packages/websocket/src/client/netty/index.ts index f6585300..ec7ec1a8 100644 --- a/packages/websocket/src/client/netty/index.ts +++ b/packages/websocket/src/client/netty/index.ts @@ -136,7 +136,7 @@ export class NettyWebSocket extends Transport { console.debug(`Netty Client doClose code: ${code} reason: ${reason}`) if (this.readyState == WebSocket.CLOSING) { if (!this._closeFrameSent) { - console.debug(`Netty Client doClose send close frame`) + console.debug(`Netty Client doClose send close frame code: ${code} reason: ${reason}`) this.channel?.writeAndFlush(new CloseWebSocketFrame(code, reason)) this._closeFrameSent = true } diff --git a/packages/websocket/src/client/transport.ts b/packages/websocket/src/client/transport.ts index d28bfde4..1e949590 100644 --- a/packages/websocket/src/client/transport.ts +++ b/packages/websocket/src/client/transport.ts @@ -56,11 +56,8 @@ export abstract class Transport extends EventEmitter { this.abortHandshake(new Error(msg)); return; } - if (this.readyState === WebSocket.CLOSING) { - if (this._closeFrameSent && this._closeFrameReceived) { - this.onclose({ code, reason }); - } - return; + if (code != 1000 && (code < 3000 || code > 4999)) { + throw new Error(`The code must be either 1000, or between 3000 and 4999. ${code} is neither.`) } this.readyState = WebSocket.CLOSING try { @@ -104,8 +101,11 @@ export abstract class Transport extends EventEmitter { receiverClose(code: number, reason: string) { console.debug(`Netty Handler receeve close code: ${code} reason: ${reason}`) + // if not set code then set code to 1000 + if (code === -1) { code = this._closeFrameSent ? 1005 : 1001 } + this.readyState = WebSocket.CLOSING this._closeFrameReceived = true; - this.close(code, reason) + this.doClose(code, reason) } abstract getId(): string