diff --git a/protocol.ts b/protocol.ts index e9ddae774c5afd78ef7fcfa6281c3427a3df849c..b11ecfc511b4189a387e4ec943245fa5983de16e 100644 --- a/protocol.ts +++ b/protocol.ts @@ -13,6 +13,8 @@ export interface SocketOptions { } export class Protocol extends PersistentProtocol { + private disposed: boolean = false; + public constructor( secWebsocketKey: string, socket: net.Socket, @@ -40,12 +42,21 @@ export class Protocol extends PersistentProtocol { ].join("\r\n") + "\r\n\r\n"); } + public sendDisconnect(): void { + if (!this.disposed) { + super.sendDisconnect(); + } + } + public dispose(error?: Error): void { - if (error) { - this.sendMessage({ type: "error", reason: error.message }); + if (!this.disposed) { + this.disposed = true; + if (error) { + this.sendMessage({ type: "error", reason: error.message }); + } + super.dispose(); + this.getSocket().dispose(); } - super.dispose(); - this.getSocket().dispose(); } /**