54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
|
import { Injectable } from '@angular/core';
|
||
|
|
||
|
import { Observable, Subject } from 'rxjs';
|
||
|
|
||
|
import { RPCSubscriber } from '@loafer/ng-rpc';
|
||
|
import { LoggerService } from '@loafer/ng-logger';
|
||
|
|
||
|
import { Probe } from '@overflow/commons-typescript/model/probe';
|
||
|
|
||
|
export interface ProbeNotify {
|
||
|
method: string;
|
||
|
params: Probe;
|
||
|
}
|
||
|
|
||
|
export class ProbeSubscriberSubject extends Subject<ProbeNotify> {
|
||
|
|
||
|
}
|
||
|
|
||
|
@Injectable()
|
||
|
export class ProbeSubscriber {
|
||
|
private probeSubscriberSubject: ProbeSubscriberSubject;
|
||
|
|
||
|
public constructor(
|
||
|
private loggerService: LoggerService,
|
||
|
) {
|
||
|
this.probeSubscriberSubject = null;
|
||
|
}
|
||
|
|
||
|
public observable(): Observable<ProbeNotify> {
|
||
|
if (null === this.probeSubscriberSubject) {
|
||
|
this.probeSubscriberSubject = new ProbeSubscriberSubject();
|
||
|
}
|
||
|
return this.probeSubscriberSubject.asObservable();
|
||
|
}
|
||
|
|
||
|
private publish(method: string, params: any): void {
|
||
|
this.probeSubscriberSubject.next({ method: method, params: params });
|
||
|
}
|
||
|
|
||
|
@RPCSubscriber({method: 'ProbeService.onConnect'})
|
||
|
public onConnect(probe: Probe): void {
|
||
|
this.loggerService.debug('ProbeService.onConnect probe:', probe);
|
||
|
|
||
|
this.publish('ProbeService.onConnect', probe);
|
||
|
}
|
||
|
|
||
|
@RPCSubscriber({method: 'ProbeService.onDisconnect'})
|
||
|
public onDisconnect(probe: Probe): void {
|
||
|
this.loggerService.debug('ProbeService.onDisconnect noAuthProbe:', probe);
|
||
|
|
||
|
this.publish('ProbeService.onDisconnect', probe);
|
||
|
}
|
||
|
}
|