import { inject, Injectable } from "@angular/core"; import { ApiService, CfTokenService, CfWebSocketService, CfWebSocket } from "codefoxui"; import { filter, map, Observable, Subject } from "rxjs"; @Injectable({ providedIn: 'root' }) export class LocalSocketService { socketService: CfWebSocketService = inject(CfWebSocketService); apiService: ApiService = inject(ApiService); tokenService: CfTokenService = inject(CfTokenService); onMessage: Subject<{key: string, value: string}> = new Subject(); onLiveDatasetUpdate(liveDatasetName: string): Observable<{key: string, value: string}> { return this.onMessage.pipe(filter(({ key, value }) => key.toLocaleLowerCase() === 'livedatasetupdate' && value.toLocaleLowerCase() === liveDatasetName.toLocaleLowerCase())); } open(): void { if (this.apiService.apiBaseUrl === null) { console.warn('Api BaseUrl is not set, unable to connect to socket!'); return; } const socket: CfWebSocket | null = this.socketService.create('mainsocket', { url: (this.apiService.apiBaseUrl.replace('https://', 'wss://')) + '/websocket?token=' + this.tokenService.accessToken }); if (socket === null) { return; } socket.onMessage.pipe( map((messageEvent: MessageEvent) => JSON.parse(messageEvent.data)) ).subscribe(({ key, value }: any) => { this.onMessage.next({ key, value }); }); socket.open(); } }