Fix for navigation issue

This commit is contained in:
Piotr Pekala 2019-11-14 03:58:29 -08:00
parent a0cace9b62
commit 1ff8f00397
4 changed files with 34 additions and 9 deletions

View File

@ -249,6 +249,7 @@ import { PageNotFoundComponent } from './components/page-not-found/page-not-foun
import { AlignHorizontallyActionComponent } from './components/project-map/context-menu/actions/align-horizontally/align-horizontally.component'; import { AlignHorizontallyActionComponent } from './components/project-map/context-menu/actions/align-horizontally/align-horizontally.component';
import { AlignVerticallyActionComponent } from './components/project-map/context-menu/actions/align_vertically/align-vertically.component'; import { AlignVerticallyActionComponent } from './components/project-map/context-menu/actions/align_vertically/align-vertically.component';
import { ConfirmationBottomSheetComponent } from './components/projects/confirmation-bottomsheet/confirmation-bottomsheet.component'; import { ConfirmationBottomSheetComponent } from './components/projects/confirmation-bottomsheet/confirmation-bottomsheet.component';
import { NotificationService } from './services/notification.service';
if (environment.production) { if (environment.production) {
Raven.config('https://b2b1cfd9b043491eb6b566fd8acee358@sentry.io/842726', { Raven.config('https://b2b1cfd9b043491eb6b566fd8acee358@sentry.io/842726', {
@ -504,7 +505,8 @@ if (environment.production) {
InfoService, InfoService,
ComputeService, ComputeService,
TracengService, TracengService,
PacketCaptureService PacketCaptureService,
NotificationService
], ],
entryComponents: [ entryComponents: [
AddServerDialogComponent, AddServerDialogComponent,

View File

@ -63,6 +63,7 @@ import { EthernetLinkWidget } from '../../cartography/widgets/links/ethernet-lin
import { SerialLinkWidget } from '../../cartography/widgets/links/serial-link'; import { SerialLinkWidget } from '../../cartography/widgets/links/serial-link';
import { NavigationDialogComponent } from '../projects/navigation-dialog/navigation-dialog.component'; import { NavigationDialogComponent } from '../projects/navigation-dialog/navigation-dialog.component';
import { ConfirmationBottomSheetComponent } from '../projects/confirmation-bottomsheet/confirmation-bottomsheet.component'; import { ConfirmationBottomSheetComponent } from '../projects/confirmation-bottomsheet/confirmation-bottomsheet.component';
import { NotificationService } from '../../services/notification.service';
@Component({ @Component({
@ -78,6 +79,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
public symbols: Symbol[] = []; public symbols: Symbol[] = [];
public project: Project; public project: Project;
public server: Server; public server: Server;
public projectws: WebSocket;
public ws: WebSocket; public ws: WebSocket;
public isProjectMapMenuVisible: boolean = false; public isProjectMapMenuVisible: boolean = false;
public isConsoleVisible: boolean = true; public isConsoleVisible: boolean = true;
@ -146,7 +148,8 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
private mapSettingsService: MapSettingsService, private mapSettingsService: MapSettingsService,
private ethernetLinkWidget: EthernetLinkWidget, private ethernetLinkWidget: EthernetLinkWidget,
private serialLinkWidget: SerialLinkWidget, private serialLinkWidget: SerialLinkWidget,
private bottomSheet: MatBottomSheet private bottomSheet: MatBottomSheet,
private notificationService: NotificationService
) {} ) {}
ngOnInit() { ngOnInit() {
@ -162,6 +165,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
.pipe( .pipe(
mergeMap((server: Server) => { mergeMap((server: Server) => {
this.server = server; this.server = server;
this.setUpWS();
return this.projectService.get(server, paramMap.get('project_id')).pipe( return this.projectService.get(server, paramMap.get('project_id')).pipe(
map(project => { map(project => {
return project; return project;
@ -311,25 +315,29 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
this.drawingsDataSource.set(drawings); this.drawingsDataSource.set(drawings);
this.setUpMapCallbacks(); this.setUpMapCallbacks();
this.setUpWS(project); this.setUpProjectWS(project);
this.progressService.deactivate(); this.progressService.deactivate();
}); });
this.subscriptions.push(subscription); this.subscriptions.push(subscription);
} }
setUpWS(project: Project) { setUpProjectWS(project: Project) {
this.ws = new WebSocket(this.projectService.notificationsPath(this.server, project.project_id)); this.projectws = new WebSocket(this.projectService.notificationsPath(this.server, project.project_id));
this.ws.onmessage = (event: MessageEvent) => { this.projectws.onmessage = (event: MessageEvent) => {
this.projectWebServiceHandler.handleMessage(JSON.parse(event.data)); this.projectWebServiceHandler.handleMessage(JSON.parse(event.data));
}; };
this.ws.onerror = (event: MessageEvent) => { this.projectws.onerror = (event: MessageEvent) => {
this.toasterService.error('Connection to host lost.'); this.toasterService.error('Connection to host lost.');
}; };
} }
setUpWS() {
this.ws = new WebSocket(this.notificationService.notificationsPath(this.server));
}
setUpMapCallbacks() { setUpMapCallbacks() {
if (!this.readonly) { if (!this.readonly) {
this.toolsService.selectionToolActivation(true); this.toolsService.selectionToolActivation(true);
@ -802,8 +810,11 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
this.nodesDataSource.clear(); this.nodesDataSource.clear();
this.linksDataSource.clear(); this.linksDataSource.clear();
if (this.ws.OPEN) { if (this.projectws) {
this.ws.close(); if (this.projectws.OPEN) this.projectws.close();
}
if (this.ws) {
if (this.ws.OPEN) this.ws.close();
} }
this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe()); this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe());
} }

View File

@ -0,0 +1,12 @@
import { Injectable } from '@angular/core';
import { HttpServer } from './http-server.service';
import { Server } from '../models/server';
@Injectable()
export class NotificationService {
constructor(private httpServer: HttpServer) {}
notificationsPath(server: Server): string {
return `ws://${server.host}:${server.port}/v2/notifications/ws`;
}
}