Changeset View
Changeset View
Standalone View
Standalone View
lib/socket/inflight-requests.js
Show All 10 Lines | import { | ||||
type ClientStateSyncServerSocketMessage, | type ClientStateSyncServerSocketMessage, | ||||
type ClientRequestsServerSocketMessage, | type ClientRequestsServerSocketMessage, | ||||
type ActivityUpdateResponseServerSocketMessage, | type ActivityUpdateResponseServerSocketMessage, | ||||
type PongServerSocketMessage, | type PongServerSocketMessage, | ||||
type APIResponseServerSocketMessage, | type APIResponseServerSocketMessage, | ||||
type ServerSocketMessageType, | type ServerSocketMessageType, | ||||
serverSocketMessageTypes, | serverSocketMessageTypes, | ||||
} from '../types/socket-types.js'; | } from '../types/socket-types.js'; | ||||
import { ServerError, ExtendableError } from '../utils/errors.js'; | import { ServerError, SocketOffline, SocketTimeout } from '../utils/errors.js'; | ||||
import sleep from '../utils/sleep.js'; | import sleep from '../utils/sleep.js'; | ||||
type ValidResponseMessageMap = { | type ValidResponseMessageMap = { | ||||
a: ClientStateSyncServerSocketMessage, | a: ClientStateSyncServerSocketMessage, | ||||
b: ClientRequestsServerSocketMessage, | b: ClientRequestsServerSocketMessage, | ||||
c: ActivityUpdateResponseServerSocketMessage, | c: ActivityUpdateResponseServerSocketMessage, | ||||
d: PongServerSocketMessage, | d: PongServerSocketMessage, | ||||
e: APIResponseServerSocketMessage, | e: APIResponseServerSocketMessage, | ||||
Show All 10 Lines | |||||
>; | >; | ||||
type ValidResponseMessage = $Values<ValidResponseMessageMap>; | type ValidResponseMessage = $Values<ValidResponseMessageMap>; | ||||
type InflightRequest = $Values<InflightRequestMap>; | type InflightRequest = $Values<InflightRequestMap>; | ||||
const remainingTimeAfterVisualTimeout = | const remainingTimeAfterVisualTimeout = | ||||
clientRequestSocketTimeout - clientRequestVisualTimeout; | clientRequestSocketTimeout - clientRequestVisualTimeout; | ||||
class SocketOffline extends ExtendableError {} | |||||
class SocketTimeout extends ExtendableError { | |||||
expectedResponseType: ServerSocketMessageType; | |||||
constructor(expectedType: ServerSocketMessageType) { | |||||
super(`socket timed out waiting for response type ${expectedType}`); | |||||
this.expectedResponseType = expectedType; | |||||
} | |||||
} | |||||
type Callbacks = { | type Callbacks = { | ||||
timeout: () => void, | timeout: () => void, | ||||
setLateResponse: (messageID: number, isLate: boolean) => void, | setLateResponse: (messageID: number, isLate: boolean) => void, | ||||
}; | }; | ||||
class InflightRequests { | class InflightRequests { | ||||
data: InflightRequest[] = []; | data: InflightRequest[] = []; | ||||
timeoutCallback: () => void; | timeoutCallback: () => void; | ||||
setLateResponse: (messageID: number, isLate: boolean) => void; | setLateResponse: (messageID: number, isLate: boolean) => void; | ||||
▲ Show 20 Lines • Show All 180 Lines • ▼ Show 20 Lines | for (const inflightRequest of this.data) { | ||||
) { | ) { | ||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
} | } | ||||
export { SocketOffline, SocketTimeout, InflightRequests }; | export { InflightRequests }; |