* Adds a new client. * * @return {Socket} * @private
(
client: Client<ListenEvents, EmitEvents, ServerSideEvents>,
auth: Record<string, unknown>,
fn: (
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
) => void
)
| 313 | * @private |
| 314 | */ |
| 315 | async _add( |
| 316 | client: Client<ListenEvents, EmitEvents, ServerSideEvents>, |
| 317 | auth: Record<string, unknown>, |
| 318 | fn: ( |
| 319 | socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData> |
| 320 | ) => void |
| 321 | ) { |
| 322 | debug("adding socket to nsp %s", this.name); |
| 323 | const socket = await this._createSocket(client, auth); |
| 324 | |
| 325 | if ( |
| 326 | // @ts-ignore |
| 327 | this.server.opts.connectionStateRecovery?.skipMiddlewares && |
| 328 | socket.recovered && |
| 329 | client.conn.readyState === "open" |
| 330 | ) { |
| 331 | return this._doConnect(socket, fn); |
| 332 | } |
| 333 | |
| 334 | this.run(socket, (err) => { |
| 335 | process.nextTick(() => { |
| 336 | if ("open" !== client.conn.readyState) { |
| 337 | debug("next called after client was closed - ignoring socket"); |
| 338 | socket._cleanup(); |
| 339 | return; |
| 340 | } |
| 341 | |
| 342 | if (err) { |
| 343 | debug("middleware error, sending CONNECT_ERROR packet to the client"); |
| 344 | socket._cleanup(); |
| 345 | if (client.conn.protocol === 3) { |
| 346 | return socket._error(err.data || err.message); |
| 347 | } else { |
| 348 | return socket._error({ |
| 349 | message: err.message, |
| 350 | data: err.data, |
| 351 | }); |
| 352 | } |
| 353 | } |
| 354 | |
| 355 | this._doConnect(socket, fn); |
| 356 | }); |
| 357 | }); |
| 358 | } |
| 359 | |
| 360 | private async _createSocket( |
| 361 | client: Client<ListenEvents, EmitEvents, ServerSideEvents>, |
no test coverage detected