import { Injectable } from '@angular/core'; import { catchError, exhaustMap, map, tap } from 'rxjs/operators'; import { RPCSubscriber } from '@loafer/ng-rpc'; import { LoggerService } from '@loafer/ng-logger'; import { DiscoverSelector } from '../store'; import * as DiscoverStore from '../store/discover'; import { Zone, Host, Port, Service, } from '@overflow/commons-typescript/model/discovery'; import { DiscoverySubject } from '../core/discovery-subject'; @Injectable() export class DiscoverySubscriber { discoverySubject: DiscoverySubject | null; public constructor( private loggerService: LoggerService, ) { } /** * name */ public setDiscoverySubject(discoverySubject: DiscoverySubject) { this.discoverySubject = discoverySubject; } private publish(method: string, params: any): void { if (null !== this.discoverySubject) { this.discoverySubject.next({method: method, params: params}); } } @RPCSubscriber({method: 'DiscoveryService.discoveryStart'}) public discoveryStart(startDate: Date): void { this.loggerService.debug('DiscoverySubscriber.discoveryStart startDate:', startDate); this.publish('DiscoveryService.discoveryStart', startDate); } @RPCSubscriber({method: 'DiscoveryService.discoveryStop'}) public discoveryStop(stopDate: Date): void { this.loggerService.debug('DiscoverySubscriber.discoveryStop stopDate:', stopDate); this.publish('DiscoveryService.discoveryStop', stopDate); this.setDiscoverySubject(null); } @RPCSubscriber({method: 'DiscoveryService.discoveredZone'}) public discoveredZone(zone: Zone): void { this.loggerService.debug('DiscoverySubscriber.discoveredZone zone:', zone); this.publish('DiscoveryService.discoveredZone', zone); } @RPCSubscriber({method: 'DiscoveryService.discoveredHost'}) public discoveredHost(host: Host): void { this.loggerService.debug('DiscoverySubscriber.discoveredHost host:', host); this.publish('DiscoveryService.discoveredHost', host); } @RPCSubscriber({method: 'DiscoveryService.discoveredPort'}) public discoveredPort(port: Port): void { this.publish('DiscoveryService.discoveredPort', port); } @RPCSubscriber({method: 'DiscoveryService.discoveredService'}) public discoveredService(service: Service): void { this.loggerService.debug('DiscoverySubscriber.discoveredService service:', service); this.publish('DiscoveryService.discoveredService', service); } }