@@ -6,7 +6,7 @@ import { IConfig } from "../../config";
6
6
import { Errors , MessageType } from "../../enums" ;
7
7
import { Client , IClient } from "../../models/client" ;
8
8
import { IRealm } from "../../models/realm" ;
9
- import { MyWebSocket } from "./webSocket " ;
9
+ import type WebSocket from "ws " ;
10
10
11
11
export interface IWebSocketServer extends EventEmitter {
12
12
readonly path : string ;
@@ -42,11 +42,14 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer {
42
42
43
43
this . socketServer = new WebSocketLib . Server ( { path : this . path , server } ) ;
44
44
45
- this . socketServer . on ( "connection" , ( socket : MyWebSocket , req ) => this . _onSocketConnection ( socket , req ) ) ;
45
+ this . socketServer . on ( "connection" , ( socket , req ) => this . _onSocketConnection ( socket , req ) ) ;
46
46
this . socketServer . on ( "error" , ( error : Error ) => this . _onSocketError ( error ) ) ;
47
47
}
48
48
49
- private _onSocketConnection ( socket : MyWebSocket , req : IncomingMessage ) : void {
49
+ private _onSocketConnection ( socket : WebSocket , req : IncomingMessage ) : void {
50
+ // An unhandled socket error might crash the server. Handle it first.
51
+ socket . on ( "error" , error => this . _onSocketError ( error ) )
52
+
50
53
const { query = { } } = url . parse ( req . url ?? '' , true ) ;
51
54
52
55
const { id, token, key } : IAuthParams = query ;
@@ -85,7 +88,7 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer {
85
88
86
89
private _registerClient ( { socket, id, token } :
87
90
{
88
- socket : MyWebSocket ;
91
+ socket : WebSocket ;
89
92
id : string ;
90
93
token : string ;
91
94
} ) : void {
@@ -103,7 +106,7 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer {
103
106
this . _configureWS ( socket , newClient ) ;
104
107
}
105
108
106
- private _configureWS ( socket : MyWebSocket , client : IClient ) : void {
109
+ private _configureWS ( socket : WebSocket , client : IClient ) : void {
107
110
client . setSocket ( socket ) ;
108
111
109
112
// Cleanup after a socket closes.
@@ -130,7 +133,7 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer {
130
133
this . emit ( "connection" , client ) ;
131
134
}
132
135
133
- private _sendErrorAndClose ( socket : MyWebSocket , msg : Errors ) : void {
136
+ private _sendErrorAndClose ( socket : WebSocket , msg : Errors ) : void {
134
137
socket . send (
135
138
JSON . stringify ( {
136
139
type : MessageType . ERROR ,
0 commit comments