add connection checking
This commit is contained in:
parent
5cd5ba57c2
commit
53f065b630
2 changed files with 23 additions and 0 deletions
|
@ -7,4 +7,5 @@ export interface ProtocolMessage {
|
|||
export enum ProtocolOperation {
|
||||
UploadFile = 0,
|
||||
ACK = 1,
|
||||
NOP = 2,
|
||||
}
|
22
src/VM.ts
22
src/VM.ts
|
@ -12,6 +12,9 @@ export default class VM {
|
|||
#socket : Socket;
|
||||
#writeLock : Mutex = new Mutex();
|
||||
#fileQueue : Queue<File> = new Queue<File>();
|
||||
#nopTimeout : NodeJS.Timeout | null = null;
|
||||
isConnectedToVM : boolean = false;
|
||||
#noNop : boolean = false;
|
||||
connected : boolean = false;
|
||||
#events : EventEmitter;
|
||||
constructor(socketpath : string) {
|
||||
|
@ -88,12 +91,31 @@ export default class VM {
|
|||
return;
|
||||
}
|
||||
var msg = msgpack.decode(payload) as protocol.ProtocolMessage;
|
||||
if (!this.isConnectedToVM) {
|
||||
if (this.#fileQueue.size > 0) this.fileQueueLoop();
|
||||
this.isConnectedToVM = true;
|
||||
this.#noNop = false;
|
||||
this.#nopTimeout = setInterval(() => this.#nopTimeoutFunc(), 5000);
|
||||
}
|
||||
switch (msg.Operation) {
|
||||
case protocol.ProtocolOperation.ACK:
|
||||
this.#events.emit('ack');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#nopTimeoutFunc() {
|
||||
if (!this.#noNop) {
|
||||
var payload : protocol.ProtocolMessage = {
|
||||
Operation: protocol.ProtocolOperation.NOP
|
||||
};
|
||||
var data = msgpack.encode(payload);
|
||||
this.#sendMessage(data);
|
||||
this.#noNop = true;
|
||||
} else {
|
||||
this.isConnectedToVM = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function sleep(ms : number) : Promise<void> {
|
||||
|
|
Loading…
Reference in a new issue