import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; export interface SharedData { type: string; value: any; } @Injectable({ providedIn: 'root' }) export class SharedStateService { private runnerCountSubject = new BehaviorSubject(12); runnerCount$ = this.runnerCountSubject.asObservable(); private sharedDataSubject = new BehaviorSubject({ type: '', value: null }); sharedData$ = this.sharedDataSubject.asObservable(); private channel = new BroadcastChannel('shared-display-channel'); constructor() { // Listen to messages from other windows this.channel.onmessage = (event) => { console.log('[BroadcastChannel] Received data:', event.data); if (event.data?.runnerCount !== undefined) { this.runnerCountSubject.next(event.data.runnerCount); } if (event.data?.type !== undefined && event.data?.value !== undefined) { this.sharedDataSubject.next({ type: event.data.type, value: event.data.value }); } }; } setRunnerCount(count: number) { console.log('[SharedStateService] Broadcasting runner count:', count); this.channel.postMessage({ runnerCount: count }); this.runnerCountSubject.next(count); } updateSharedData(data: SharedData) { console.log('[SharedStateService] Broadcasting data:', data); this.channel.postMessage(data); this.sharedDataSubject.next(data); } }