From 2f6c018b7a53ddee5b65a0d805d01e3a7b117c3d Mon Sep 17 00:00:00 2001 From: Jeremy Letto Date: Thu, 4 Apr 2024 23:56:12 -0500 Subject: [PATCH] untangle updateStatus (#5018) * untangle updateStatus * fix test --- webclient/src/websocket/WebClient.ts | 15 ++++---------- .../commands/session/updateStatus.ts | 9 ++++++--- .../services/KeepAliveService.spec.ts | 7 ++----- .../websocket/services/WebSocketService.ts | 20 +++++++------------ 4 files changed, 19 insertions(+), 32 deletions(-) diff --git a/webclient/src/websocket/WebClient.ts b/webclient/src/websocket/WebClient.ts index eb9e0291..1dae24d0 100644 --- a/webclient/src/websocket/WebClient.ts +++ b/webclient/src/websocket/WebClient.ts @@ -1,4 +1,4 @@ -import { ServerStatus, StatusEnum, WebSocketConnectOptions } from 'types'; +import { StatusEnum, WebSocketConnectOptions } from 'types'; import { ProtobufService } from './services/ProtobufService'; import { WebSocketService } from './services/WebSocketService'; @@ -37,6 +37,7 @@ export class WebClient { }; public options: WebSocketConnectOptions; + public status: StatusEnum; public connectionAttemptMade = false; @@ -45,10 +46,6 @@ export class WebClient { this.protobuf.handleMessageEvent(message); }); - this.socket.statusChange$.subscribe((status: ServerStatus) => { - this.handleStatusChange(status); - }); - if (process.env.NODE_ENV !== 'test') { console.log(this); } @@ -68,12 +65,8 @@ export class WebClient { this.socket.disconnect(); } - public updateStatus(status: StatusEnum, description: string) { - this.socket.updateStatus(status, description); - } - - public handleStatusChange({ status, description }: ServerStatus) { - SessionPersistence.updateStatus(status, description); + public updateStatus(status: StatusEnum) { + this.status = status; if (status === StatusEnum.DISCONNECTED) { this.protobuf.resetCommands(); diff --git a/webclient/src/websocket/commands/session/updateStatus.ts b/webclient/src/websocket/commands/session/updateStatus.ts index 08dfdce3..eddd774f 100644 --- a/webclient/src/websocket/commands/session/updateStatus.ts +++ b/webclient/src/websocket/commands/session/updateStatus.ts @@ -1,6 +1,9 @@ -import { StatusEnum } from 'types' -import webClient from '../../WebClient' +import { StatusEnum } from 'types'; +import webClient from '../../WebClient'; +import { SessionPersistence } from '../../persistence'; export function updateStatus(status: StatusEnum, description: string): void { - webClient.updateStatus(status, description); + SessionPersistence.updateStatus(status, description); + + webClient.updateStatus(status); } diff --git a/webclient/src/websocket/services/KeepAliveService.spec.ts b/webclient/src/websocket/services/KeepAliveService.spec.ts index d15810ed..df5169b4 100644 --- a/webclient/src/websocket/services/KeepAliveService.spec.ts +++ b/webclient/src/websocket/services/KeepAliveService.spec.ts @@ -1,17 +1,14 @@ import { KeepAliveService } from './KeepAliveService'; -import { WebSocketService } from './WebSocketService'; import webClient from '../WebClient'; describe('KeepAliveService', () => { let service: KeepAliveService; - let socket: WebSocketService; beforeEach(() => { jest.useFakeTimers(); - socket = new WebSocketService(webClient); - service = new KeepAliveService(socket); + service = new KeepAliveService(webClient.socket); }); it('should create', () => { @@ -30,7 +27,7 @@ describe('KeepAliveService', () => { promise = new Promise(resolve => resolvePing = resolve); ping = (done) => promise.then(done); - checkReadyStateSpy = jest.spyOn(socket, 'checkReadyState'); + checkReadyStateSpy = jest.spyOn(webClient.socket, 'checkReadyState'); checkReadyStateSpy.mockImplementation(() => true); service.startPingLoop(interval, ping); diff --git a/webclient/src/websocket/services/WebSocketService.ts b/webclient/src/websocket/services/WebSocketService.ts index 84286485..95fa2d35 100644 --- a/webclient/src/websocket/services/WebSocketService.ts +++ b/webclient/src/websocket/services/WebSocketService.ts @@ -1,10 +1,11 @@ import { Subject } from 'rxjs'; -import { ServerStatus, StatusEnum, WebSocketConnectOptions } from 'types'; +import { StatusEnum, WebSocketConnectOptions } from 'types'; import { KeepAliveService } from './KeepAliveService'; import { WebClient } from '../WebClient'; import { SessionPersistence } from '../persistence'; +import { updateStatus } from '../commands/session'; export class WebSocketService { private socket: WebSocket; @@ -14,9 +15,7 @@ export class WebSocketService { private keepAliveService: KeepAliveService; public message$: Subject = new Subject(); - public statusChange$: Subject = new Subject(); - private status: StatusEnum = StatusEnum.DISCONNECTED; private keepalive: number; constructor(webClient: WebClient) { @@ -25,7 +24,7 @@ export class WebSocketService { this.keepAliveService = new KeepAliveService(this); this.keepAliveService.disconnected$.subscribe(() => { this.disconnect(); - this.updateStatus(StatusEnum.DISCONNECTED, 'Connection timeout'); + updateStatus(StatusEnum.DISCONNECTED, 'Connection timeout'); }); } @@ -64,11 +63,6 @@ export class WebSocketService { this.socket.send(message); } - public updateStatus(status: StatusEnum, description: string): void { - this.status = status; - this.statusChange$.next({ status, description }); - } - private createWebSocket(url: string): WebSocket { const socket = new WebSocket(url); socket.binaryType = 'arraybuffer'; @@ -77,7 +71,7 @@ export class WebSocketService { socket.onopen = () => { clearTimeout(connectionTimer); - this.updateStatus(StatusEnum.CONNECTED, 'Connected'); + updateStatus(StatusEnum.CONNECTED, 'Connected'); this.keepAliveService.startPingLoop(this.keepalive, (pingReceived: Function) => { this.webClient.keepAlive(pingReceived); @@ -86,15 +80,15 @@ export class WebSocketService { socket.onclose = () => { // dont overwrite failure messages - if (this.status !== StatusEnum.DISCONNECTED) { - this.updateStatus(StatusEnum.DISCONNECTED, 'Connection Closed'); + if (this.webClient.status !== StatusEnum.DISCONNECTED) { + updateStatus(StatusEnum.DISCONNECTED, 'Connection Closed'); } this.keepAliveService.endPingLoop(); }; socket.onerror = () => { - this.updateStatus(StatusEnum.DISCONNECTED, 'Connection Failed'); + updateStatus(StatusEnum.DISCONNECTED, 'Connection Failed'); SessionPersistence.connectionFailed(); };