50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { Component, OnInit, Output, EventEmitter } from '@angular/core';
|
|
import { WebSocketService } from '../services/websocket.service';
|
|
import { WebSocketMessage } from '../message-types/websocket-message';
|
|
import { ConsoleReadMessage, ConsoleWriteMessage } from '../message-types/console-messages';
|
|
|
|
@Component({
|
|
selector: 'app-console',
|
|
templateUrl: './console.component.html',
|
|
styleUrls: ['./console.component.scss']
|
|
})
|
|
export class ConsoleComponent implements OnInit {
|
|
console_content = '';
|
|
|
|
@Output() contentChanged = new EventEmitter<string>();
|
|
|
|
command_handlers = {
|
|
'console.read': this.readHandler.bind(this),
|
|
'console.write': this.writeHandler.bind(this),
|
|
};
|
|
|
|
constructor(private webSocketService: WebSocketService) {}
|
|
|
|
ngOnInit() {
|
|
this.webSocketService.connect();
|
|
this.webSocketService.observeKey<WebSocketMessage>('console').subscribe(
|
|
message => this.command_handlers[message.key](message)
|
|
);
|
|
}
|
|
|
|
readHandler(message: ConsoleReadMessage) {
|
|
this.sendContent(this.console_content);
|
|
}
|
|
|
|
writeHandler(message: ConsoleWriteMessage) {
|
|
this.setContent(message.value);
|
|
this.contentChanged.next(message.value);
|
|
}
|
|
|
|
setContent(content: string) {
|
|
this.console_content = content;
|
|
}
|
|
|
|
sendContent(content: string) {
|
|
this.webSocketService.send({
|
|
'key': 'console.content',
|
|
'value': content
|
|
});
|
|
}
|
|
}
|