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

@@ -22,7 +22,7 @@ class TransportError extends Error {
export interface CloseDetails {
description: string
context?: CloseEvent | XMLHttpRequest
context?: unknown // context should be typed as CloseEvent | XMLHttpRequest, but these types are not available on non-browser platforms
}
interface TransportReservedEvents {
@@ -35,32 +35,34 @@ interface TransportReservedEvents {
drain: () => void
}
type TransportState = "opening" | "open" | "closed" | "pausing" | "paused"
export abstract class Transport extends Emitter<
{},
{},
Record<never, never>,
Record<never, never>,
TransportReservedEvents
> {
public query: Record<string, string>
public writable: boolean = false;
protected opts: SocketOptions
protected supportsBinary: boolean
protected query: object
protected readyState: string
protected writable: boolean = false;
protected readyState: TransportState
protected socket: any
protected setTimeoutFn: typeof setTimeout
/**
* Transport abstract constructor.
*
* @param {Object} options.
* @api private
*/
* Transport abstract constructor.
*
* @param {Object} opts - options
* @protected
*/
constructor(opts) {
super()
installTimerFunctions(this, opts)
this.opts = opts
this.query = opts.query
this.readyState = ""
this.socket = opts.socket
}
@@ -71,7 +73,7 @@ export abstract class Transport extends Emitter<
* @param description
* @param context - the error context
* @return {Transport} for chaining
* @api protected
* @protected
*/
protected onError(reason: string, description: any, context?: any) {
super.emitReserved(
@@ -83,25 +85,19 @@ export abstract class Transport extends Emitter<
/**
* Opens the transport.
*
* @api public
*/
private open() {
if ("closed" === this.readyState || "" === this.readyState) {
this.readyState = "opening"
this.doOpen()
}
public open() {
this.readyState = "opening"
this.doOpen()
return this
}
/**
* Closes the transport.
*
* @api public
*/
public close() {
if ("opening" === this.readyState || "open" === this.readyState) {
if (this.readyState === "opening" || this.readyState === "open") {
this.doClose()
this.onClose()
}
@@ -110,13 +106,12 @@ export abstract class Transport extends Emitter<
}
/**
* Sends multiple packets.
*
* @param {Array} packets
* @api public
*/
* Sends multiple packets.
*
* @param {Array} packets
*/
public send(packets) {
if ("open" === this.readyState) {
if (this.readyState === "open") {
this.write(packets)
} else {
// this might happen if the transport was silently closed in the beforeunload event handler
@@ -127,7 +122,7 @@ export abstract class Transport extends Emitter<
/**
* Called upon open
*
* @api protected
* @protected
*/
protected onOpen() {
this.readyState = "open"
@@ -139,17 +134,18 @@ export abstract class Transport extends Emitter<
* Called with data.
*
* @param {String} data
* @api protected
* @protected
*/
protected onData(data: RawData) {
const packet = decodePacket(data, this.socket.binaryType)
this.onPacket(packet)
}
/**
* Called with a decoded packet.
*
* @api protected
* @protected
*/
protected onPacket(packet: Packet) {
super.emitReserved("packet", packet)
@@ -158,14 +154,26 @@ export abstract class Transport extends Emitter<
/**
* Called upon close.
*
* @api protected
* @protected
*/
protected onClose(details?: CloseDetails) {
this.readyState = "closed"
super.emitReserved("close", details)
}
/**
* The name of the transport
*/
public abstract get name(): string
/**
* Pauses the transport, in order not to lose packets during an upgrade.
*
* @param onPause
*/
public pause(onPause: () => void) { }
protected abstract doOpen()
protected abstract doClose()
protected abstract write(packets)
protected abstract write(packets: Packet[])
}