43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
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<number>(12);
|
|
runnerCount$ = this.runnerCountSubject.asObservable();
|
|
|
|
private sharedDataSubject = new BehaviorSubject<SharedData>({ 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);
|
|
}
|
|
} |