member_webapp/@overflow/discovery/component/discovery.component.ts

103 lines
3.0 KiB
TypeScript
Raw Normal View History

2018-05-31 11:53:11 +00:00
import {
2018-06-01 11:25:51 +00:00
Component, Input, Output, EventEmitter, OnDestroy, ViewChild,
2018-05-31 11:53:11 +00:00
} from '@angular/core';
import { Probe, ProbeHost } from '@overflow/commons-typescript/model/probe';
import { Anim } from './animation';
import { Store, select } from '@ngrx/store';
import { Observable, of, Subscription } from 'rxjs';
import { DiscoveryService } from '../service/discovery.service';
import { catchError, exhaustMap, map, tap } from 'rxjs/operators';
import { DiscoverZone, Zone, Host, Port, Service } from '@overflow/commons-typescript/model/discovery';
2018-05-31 13:11:23 +00:00
import { DiscoverySubscriber, DiscoveryNotify } from '../subscriber/discovery.subscriber';
2018-06-01 11:25:51 +00:00
import { SearchResultComponent } from './search-result.component';
2018-05-31 11:53:11 +00:00
@Component({
selector: 'of-discovery',
templateUrl: './discovery.component.html',
2018-06-01 07:32:16 +00:00
animations: Anim,
2018-05-31 11:53:11 +00:00
})
2018-06-01 09:56:00 +00:00
export class DiscoveryComponent implements OnDestroy {
2018-05-31 11:53:11 +00:00
@Input() probeHostID;
pending$: Observable<boolean>;
error$: Observable<any>;
discoverySubscription: Subscription;
selectedProbe: ProbeHost;
requested: boolean;
2018-06-01 02:47:37 +00:00
discoverZone: DiscoverZone;
2018-05-31 11:53:11 +00:00
2018-06-01 11:25:51 +00:00
@ViewChild('discoveryResult') discoveryResult: SearchResultComponent;
2018-05-31 11:53:11 +00:00
constructor(
private discoveryService: DiscoveryService,
2018-05-31 12:44:11 +00:00
private discoverySubscriber: DiscoverySubscriber,
2018-05-31 11:53:11 +00:00
private store: Store<any>
) {
}
2018-06-01 09:56:00 +00:00
ngOnDestroy(): void {
if (null !== this.discoverySubscription) {
this.discoverySubscription.unsubscribe();
}
}
2018-05-31 11:53:11 +00:00
onRequestDiscovery(dz: DiscoverZone) {
this.requested = true;
2018-06-01 02:47:37 +00:00
this.discoverZone = dz;
2018-06-01 09:56:00 +00:00
this.discoverySubscription = this.discoverySubscriber.observable().pipe(
2018-05-31 12:44:11 +00:00
tap(() => {
this.discoveryService.discoverZone(this.selectedProbe.probe.probeKey, dz);
}),
2018-05-31 11:53:11 +00:00
map((discoveryNotify: DiscoveryNotify) => {
switch (discoveryNotify.method) {
case 'DiscoveryService.discoveryStart': {
const startDate = discoveryNotify.params as Date;
2018-06-01 03:22:42 +00:00
2018-05-31 11:53:11 +00:00
break;
}
case 'DiscoveryService.discoveryStop': {
const stopDate = discoveryNotify.params as Date;
this.discoverySubscription.unsubscribe();
2018-06-01 09:56:00 +00:00
this.discoverySubscription = null;
2018-06-01 11:25:51 +00:00
2018-05-31 11:53:11 +00:00
break;
}
case 'DiscoveryService.discoveredZone': {
const zone = discoveryNotify.params as Zone;
break;
}
case 'DiscoveryService.discoveredHost': {
const host = discoveryNotify.params as Host;
break;
}
case 'DiscoveryService.discoveredPort': {
const port = discoveryNotify.params as Port;
break;
}
case 'DiscoveryService.discoveredService': {
const service = discoveryNotify.params as Service;
break;
}
default: {
break;
}
}
}),
catchError(error => {
return of();
}),
).subscribe();
}
onRequestDiscoveryStop() {
2018-06-01 02:47:37 +00:00
this.discoverZone = null;
2018-05-31 11:53:11 +00:00
this.requested = false;
}
}