From 2dec7497a704202f8362682f498bfbfe5f511a4a Mon Sep 17 00:00:00 2001 From: wakonig_k Date: Mon, 10 Feb 2025 09:29:03 +0100 Subject: [PATCH] fix: connect to selected deployment; reconnect when necessary --- .../src/app/core/redis-connector.service.ts | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/frontend/bec_atlas/src/app/core/redis-connector.service.ts b/frontend/bec_atlas/src/app/core/redis-connector.service.ts index e9dc54f..e1142f6 100644 --- a/frontend/bec_atlas/src/app/core/redis-connector.service.ts +++ b/frontend/bec_atlas/src/app/core/redis-connector.service.ts @@ -4,23 +4,31 @@ import { Observable } from 'rxjs'; import { MessageEndpoints, EndpointInfo } from './redis_endpoints'; import { AppConfigService } from '../app-config.service'; import { ServerSettingsService } from '../server-settings.service'; +import { DeploymentService } from '../deployment.service'; -@Injectable({ - providedIn: 'root', -}) +@Injectable() export class RedisConnectorService { - private socket!: Socket; + private socket: Socket | null = null; private signals: Map> = new Map(); private signalReferenceCount: Map = new Map(); - constructor(private serverSettings: ServerSettingsService) { - this.connect(); + constructor( + private serverSettings: ServerSettingsService, + private deploymentService: DeploymentService + ) { + this.deploymentService.selectedDeployment.subscribe((deployment) => { + this.disconnect(); + if (!deployment) { + return; + } + this.connect(deployment._id); + }); } /** * Connect to the WebSocket server using socket.io */ - private connect(): void { + private connect(id: string): void { this.socket = io(this.serverSettings.getSocketAddress(), { transports: ['websocket'], // Use WebSocket only autoConnect: true, // Automatically connect @@ -30,7 +38,7 @@ export class RedisConnectorService { auth: { user: 'john_doe', token: '1234', - deployment: '678aa8d4875568640bd92176', + deployment: id, }, }); @@ -79,6 +87,10 @@ export class RedisConnectorService { * @param data Data to send */ public emit(event: string, data: any): void { + if (!this.socket) { + console.error('Socket not connected'); + return; + } this.socket.emit(event, data); } @@ -122,12 +134,19 @@ export class RedisConnectorService { */ public on(event: string): Observable { return new Observable((observer) => { + if (!this.socket) { + console.error('Socket not connected'); + return; + } this.socket.on(event, (data: T) => { observer.next(data); }); // Cleanup when unsubscribed return () => { + if (!this.socket) { + return; + } this.socket.off(event); }; });