mirror of
https://github.com/avatao-content/frontend-tutorial-framework
synced 2025-01-15 23:51:57 +00:00
Merge pull request #11 from avatao-content/bottomless_pit
Add frontend support for 'bottomless_pit' refactor
This commit is contained in:
commit
a2e5dc39a9
@ -23,7 +23,7 @@ export class MessagesComponent implements OnInit {
|
||||
|
||||
ngOnInit() {
|
||||
this.websocketService.connect();
|
||||
this.websocketService.observeAnchor<Message>('message').subscribe(
|
||||
this.websocketService.observeKey<Message>('message').subscribe(
|
||||
(event) => {
|
||||
this.messages.push(event.data);
|
||||
event.data.message = this.convert(event.data.message);
|
||||
|
@ -11,7 +11,7 @@ export class FSMUpdateService {
|
||||
constructor(private websocketService: WebSocketService) {}
|
||||
|
||||
public init(): void {
|
||||
this.websocketService.observeAnchor<FSMUpdate>('FSMUpdate').subscribe((event) => {
|
||||
this.websocketService.observeKey<FSMUpdate>('FSMUpdate').subscribe((event) => {
|
||||
this.current_state = event.data.current_state;
|
||||
this.valid_transitions = event.data.valid_transitions;
|
||||
});
|
||||
|
@ -18,9 +18,7 @@ export class WebSocketService {
|
||||
private uplink: QueueingSubject<object>;
|
||||
public downlink: Observable<WSMessage<undefined>>;
|
||||
|
||||
constructor() {
|
||||
|
||||
}
|
||||
constructor() {}
|
||||
|
||||
public connect() {
|
||||
if (this.downlink) {
|
||||
@ -41,17 +39,17 @@ export class WebSocketService {
|
||||
console.log('ws connected');
|
||||
}
|
||||
|
||||
public observeAnchor<T>(anchor: string): Observable<WSMessage<T>> {
|
||||
return this.downlink.pipe(filter(message => message.anchor === anchor));
|
||||
public observeKey<T>(key: string): Observable<WSMessage<T>> {
|
||||
return this.downlink.pipe(filter(message => message.key === key));
|
||||
}
|
||||
|
||||
public send(anchor: string, data: any): void {
|
||||
public send(key: string, data: any): void {
|
||||
// If the WebSocket is not connected then the QueueingSubject will ensure
|
||||
// that messages are queued and delivered when the WebSocket reconnects.
|
||||
// A regular Subject can be used to discard messages sent when the WebSocket
|
||||
// is disconnected.
|
||||
this.uplink.next({
|
||||
'anchor': anchor,
|
||||
'key': key,
|
||||
'data': data
|
||||
});
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
export class WSMessage<T> {
|
||||
anchor: string;
|
||||
key: string;
|
||||
trigger?: string;
|
||||
data: T; // TODO: sane annotation
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ const defaultSourceCode = `alert( 'Hello, world!' );`;
|
||||
styleUrls: ['./webide.component.scss']
|
||||
})
|
||||
export class WebideComponent implements OnInit {
|
||||
anchor_id = 'anchor_webide';
|
||||
key_id = 'webide';
|
||||
filename = 'demo.js';
|
||||
code: string = defaultSourceCode;
|
||||
language = 'javascript';
|
||||
@ -47,7 +47,7 @@ export class WebideComponent implements OnInit {
|
||||
}
|
||||
|
||||
subscribeWS() {
|
||||
this.webSocketService.observeAnchor<SourceCode>(this.anchor_id).subscribe((event) => {
|
||||
this.webSocketService.observeKey<SourceCode>(this.key_id).subscribe((event) => {
|
||||
this.command_handlers[event.data.command](event.data);
|
||||
this.changeDetectorRef.detectChanges();
|
||||
});
|
||||
@ -81,7 +81,7 @@ export class WebideComponent implements OnInit {
|
||||
}
|
||||
|
||||
sendCode() {
|
||||
this.webSocketService.send(this.anchor_id, {
|
||||
this.webSocketService.send(this.key_id, {
|
||||
'command': 'write',
|
||||
'content': this.code
|
||||
});
|
||||
@ -89,13 +89,13 @@ export class WebideComponent implements OnInit {
|
||||
}
|
||||
|
||||
requestCode() {
|
||||
this.webSocketService.send(this.anchor_id, {
|
||||
this.webSocketService.send(this.key_id, {
|
||||
'command': 'read'
|
||||
});
|
||||
}
|
||||
|
||||
selectCode(filename: string) {
|
||||
this.webSocketService.send(this.anchor_id, {
|
||||
this.webSocketService.send(this.key_id, {
|
||||
'command': 'select',
|
||||
'filename': filename
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user