mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-04-27 07:48:01 -07:00
Webatrice websocket refactor (#4435)
* add unit tests for websocket events * add unit tests for KeepAliveService, clean up keepAlive termination flow * put keepAlive command in protobuf service and expose thru webClient * secure wss * rename files tsx to ts * add localhost support for ws/wss connection Co-authored-by: Jeremy Letto <jeremy.letto@datasite.com>
This commit is contained in:
parent
f75ff2a7c8
commit
586f23cfa9
15 changed files with 568 additions and 77 deletions
|
|
@ -17,7 +17,7 @@ export interface WebSocketOptions {
|
|||
export class WebSocketService {
|
||||
private socket: WebSocket;
|
||||
private webClient: WebClient;
|
||||
public keepAliveService: KeepAliveService;
|
||||
private keepAliveService: KeepAliveService;
|
||||
|
||||
public message$: Subject<MessageEvent> = new Subject();
|
||||
public statusChange$: Subject<ServerStatus> = new Subject();
|
||||
|
|
@ -36,6 +36,10 @@ export class WebSocketService {
|
|||
}
|
||||
|
||||
public connect(options: WebSocketOptions, protocol: string = 'wss'): void {
|
||||
if (window.location.hostname === 'localhost') {
|
||||
protocol = 'ws';
|
||||
}
|
||||
|
||||
const { host, port, keepalive } = options;
|
||||
this.keepalive = keepalive;
|
||||
|
||||
|
|
@ -49,7 +53,7 @@ export class WebSocketService {
|
|||
}
|
||||
|
||||
public checkReadyState(state: number): boolean {
|
||||
return this.socket.readyState === state;
|
||||
return this.socket?.readyState === state;
|
||||
}
|
||||
|
||||
public send(message): void {
|
||||
|
|
@ -69,13 +73,7 @@ export class WebSocketService {
|
|||
this.updateStatus(StatusEnum.CONNECTED, "Connected");
|
||||
|
||||
this.keepAliveService.startPingLoop(this.keepalive, (pingReceived: Function) => {
|
||||
const command = this.webClient.protobuf.controller.SessionCommand.create({
|
||||
".Command_Ping.ext" : this.webClient.protobuf.controller.Command_Ping.create()
|
||||
});
|
||||
|
||||
this.webClient.protobuf.sendSessionCommand(command, () => {
|
||||
pingReceived();
|
||||
});
|
||||
this.webClient.keepAlive(pingReceived);
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue