1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
import { WebSocket as wsocket } from 'ws';
import { ServerStatus as Status } from './api-defs.js';
let SERVER_LOG = 1;
let API_ADDRESS = 'http://localhost:4000';
export var status: Status = { isBusy: false, lastUpdate: 0, loadedModel: '', domain: '' };
export var ws: wsocket;
let slog = ( msg: string ) => { if( SERVER_LOG ) console.log( '[server] ' + msg ); };
export function setStatus( s: any ) {
const newstatus: Status = { ...status, ...s };
status = newstatus;
return status;
}
export function serverOpen( addr: string ) {
API_ADDRESS = addr;
ws = new wsocket( addr );
ws.on( 'open', () => {
slog( 'connection opened' );
let s = status;
s.lastUpdate = Date.now();
s.msg = 'welcome';
ws.send( JSON.stringify( s ) );
} );
ws.on( 'message', ( message: string ) => {
status.lastUpdate = Date.now();
try {
let json = JSON.parse( message );
if( json.msg == 'ping' ) {
let s = { ...status };
s.msg = 'pong';
setTimeout( () => ws.send( JSON.stringify( s ) ), 5000 );
}
else {
slog( `unhandled message: ${message}` );
}
} catch ( err ) {
slog( '[server] ' + err );
}
} );
ws.on( 'error' , ( err ) => {
slog( `WebSocket error: ${err}` );
ws.close();
} );
ws.on( 'close', ( code, reason ) => {
setTimeout( () => { ws = serverOpen( addr ) }, 5000 );
slog( `connection closed: ${code}, ${reason}` );
} );
return ws;
};
export function serverNotify( what: any ) {
const newstatus: Status = { ...status, ...what };
status = newstatus;
try {
ws.send( JSON.stringify( status ) );
}
catch ( err ) {
slog( '[server] ' + err );
ws = serverOpen( API_ADDRESS );
}
};
|