feat: 同步 socket.io 上游代码

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
2023-02-09 13:49:48 +08:00
parent 359aeb9d63
commit 7b85ff5b7c
35 changed files with 7612 additions and 6519 deletions

View File

@@ -26,8 +26,8 @@ export class WS extends Transport {
/**
* WebSocket transport constructor.
*
* @api {Object} connection options
* @api public
* @param {Object} opts - connection options
* @protected
*/
constructor(opts) {
super(opts)
@@ -35,21 +35,11 @@ export class WS extends Transport {
this.supportsBinary = !opts.forceBase64
}
/**
* Transport name.
*
* @api public
*/
get name() {
override get name() {
return "websocket"
}
/**
* Opens socket.
*
* @api private
*/
doOpen() {
override doOpen() {
if (!this.check()) {
// let probe timeout
return
@@ -103,31 +93,25 @@ export class WS extends Transport {
/**
* Adds event listeners to the socket
*
* @api private
* @private
*/
addEventListeners() {
private addEventListeners() {
this.ws.onopen = () => {
if (this.opts.autoUnref) {
this.ws._socket.unref()
}
this.onOpen()
}
this.ws.onclose = closeEvent =>
this.ws.onclose = (closeEvent) =>
this.onClose({
description: "websocket connection closed",
context: closeEvent
context: closeEvent,
})
this.ws.onmessage = ev => this.onData(ev.data)
this.ws.onerror = e => this.onError("websocket error", e)
this.ws.onmessage = (ev) => this.onData(ev.data)
this.ws.onerror = (e) => this.onError("websocket error", e)
}
/**
* Writes data to socket.
*
* @param {Array} array of packets.
* @api private
*/
write(packets) {
override write(packets) {
this.writable = false
// encodePacket efficient as it uses WS framing
@@ -136,7 +120,7 @@ export class WS extends Transport {
const packet = packets[i]
const lastPacket = i === packets.length - 1
encodePacket(packet, this.supportsBinary, data => {
encodePacket(packet, this.supportsBinary, (data) => {
// always create a new object (GH-437)
const opts: { compress?: boolean } = {}
if (!usingBrowserWebSocket) {
@@ -180,12 +164,7 @@ export class WS extends Transport {
}
}
/**
* Closes socket.
*
* @api private
*/
doClose() {
override doClose() {
if (typeof this.ws !== "undefined") {
this.ws.close()
this.ws = null
@@ -195,7 +174,7 @@ export class WS extends Transport {
/**
* Generates uri for connection.
*
* @api private
* @private
*/
uri() {
let query: { b64?: number } = this.query || {}
@@ -238,9 +217,9 @@ export class WS extends Transport {
* Feature detection for WebSocket.
*
* @return {Boolean} whether this transport is available.
* @api public
* @private
*/
check() {
private check() {
return !!WebSocket
}
}