(transport: Transport)
| 291 | * @private |
| 292 | */ |
| 293 | /* private */ _maybeUpgrade(transport: Transport) { |
| 294 | debug( |
| 295 | 'might upgrade socket transport from "%s" to "%s"', |
| 296 | this.transport.name, |
| 297 | transport.name, |
| 298 | ); |
| 299 | |
| 300 | this.upgrading = true; |
| 301 | |
| 302 | // set transport upgrade timer |
| 303 | const upgradeTimeoutTimer = setTimeout(() => { |
| 304 | debug("client did not complete upgrade - closing transport"); |
| 305 | cleanup(); |
| 306 | if ("open" === transport.readyState) { |
| 307 | transport.close(); |
| 308 | } |
| 309 | }, this.server.opts.upgradeTimeout); |
| 310 | |
| 311 | let checkIntervalTimer; |
| 312 | |
| 313 | const onPacket = (packet) => { |
| 314 | if ("ping" === packet.type && "probe" === packet.data) { |
| 315 | debug("got probe ping packet, sending pong"); |
| 316 | transport.send([{ type: "pong", data: "probe" }]); |
| 317 | this.emit("upgrading", transport); |
| 318 | clearInterval(checkIntervalTimer); |
| 319 | checkIntervalTimer = setInterval(check, 100); |
| 320 | } else if ("upgrade" === packet.type && this.readyState !== "closed") { |
| 321 | debug("got upgrade packet - upgrading"); |
| 322 | cleanup(); |
| 323 | this.transport.discard(); |
| 324 | this.upgraded = true; |
| 325 | this.clearTransport(); |
| 326 | this.setTransport(transport); |
| 327 | this.emit("upgrade", transport); |
| 328 | this.flush(); |
| 329 | if (this.readyState === "closing") { |
| 330 | transport.close(() => { |
| 331 | this.onClose("forced close"); |
| 332 | }); |
| 333 | } |
| 334 | } else { |
| 335 | cleanup(); |
| 336 | transport.close(); |
| 337 | } |
| 338 | }; |
| 339 | |
| 340 | // we force a polling cycle to ensure a fast upgrade |
| 341 | const check = () => { |
| 342 | if ("polling" === this.transport.name && this.transport.writable) { |
| 343 | debug("writing a noop packet to polling for fast upgrade"); |
| 344 | this.transport.send([{ type: "noop" }]); |
| 345 | } |
| 346 | }; |
| 347 | |
| 348 | const cleanup = () => { |
| 349 | this.upgrading = false; |
| 350 |
no test coverage detected