btc_horse/btc-UI/src/app/service/shared-state.service.ts

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);
}
}