frontend-tutorial-framework/src/app/services/processmanager.service.ts

53 lines
1.6 KiB
TypeScript

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<ProcessMessage>('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
});
}
}