* Adds a new client. * * @return {Socket} * @private
(
client: Client<ListenEvents, EmitEvents, ServerSideEvents>,
auth: Record<string, unknown>,
fn: (
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
) => void,
)
| 333 | * @private |
| 334 | */ |
| 335 | async _add( |
| 336 | client: Client<ListenEvents, EmitEvents, ServerSideEvents>, |
| 337 | auth: Record<string, unknown>, |
| 338 | fn: ( |
| 339 | socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>, |
| 340 | ) => void, |
| 341 | ) { |
| 342 | debug("adding socket to nsp %s", this.name); |
| 343 | const socket = await this._createSocket(client, auth); |
| 344 | |
| 345 | this._preConnectSockets.set(socket.id, socket); |
| 346 | |
| 347 | if ( |
| 348 | // @ts-ignore |
| 349 | this.server.opts.connectionStateRecovery?.skipMiddlewares && |
| 350 | socket.recovered && |
| 351 | client.conn.readyState === "open" |
| 352 | ) { |
| 353 | return this._doConnect(socket, fn); |
| 354 | } |
| 355 | |
| 356 | this.run(socket, (err) => { |
| 357 | process.nextTick(() => { |
| 358 | if ("open" !== client.conn.readyState) { |
| 359 | debug("next called after client was closed - ignoring socket"); |
| 360 | socket._cleanup(); |
| 361 | return; |
| 362 | } |
| 363 | |
| 364 | if (err) { |
| 365 | debug("middleware error, sending CONNECT_ERROR packet to the client"); |
| 366 | socket._cleanup(); |
| 367 | if (client.conn.protocol === 3) { |
| 368 | return socket._error(err.data || err.message); |
| 369 | } else { |
| 370 | return socket._error({ |
| 371 | message: err.message, |
| 372 | data: err.data, |
| 373 | }); |
| 374 | } |
| 375 | } |
| 376 | |
| 377 | this._doConnect(socket, fn); |
| 378 | }); |
| 379 | }); |
| 380 | } |
| 381 | |
| 382 | private async _createSocket( |
| 383 | client: Client<ListenEvents, EmitEvents, ServerSideEvents>, |
no test coverage detected