import { Injectable } from '@angular/core'; import { WebSocketService } from './websocket.service'; import { ProcessMessage } from '../message-types/process-message'; import { filter } from 'rxjs/operators'; @Injectable() export class ProcessManagerService { process_name: string; constructor(private webSocketService: WebSocketService) {} init() { this.webSocketService.connect(); } subscribeCallback(process_name: string, callback: (message: ProcessMessage) => void) { this.observeProcessMessage(process_name).subscribe(callback); } subscribeSuccessCallback(process_name: string, callback: (message: ProcessMessage) => void) { this.observeProcessMessage(process_name).pipe(filter(message => !('error' in message))).subscribe(callback); } subscribeErrorCallback(process_name: string, callback: (message: ProcessMessage) => void) { this.observeProcessMessage(process_name).pipe(filter(message => 'error' in message)).subscribe(callback); } observeProcessMessage(process_name: string) { return this.webSocketService.observeKey('process') .pipe(filter(message => message.name === process_name)); } startProcess(process_name: string) { this.sendCommand('start', process_name); } stopProcess(process_name: string) { this.sendCommand('stop', process_name); } restartProcess(process_name: string) { this.sendCommand('restart', process_name); } sendCommand(command: string, process_name: string) { this.webSocketService.sendJSON({ 'key': 'process.' + command, 'name': process_name }); } }