-
-
Notifications
You must be signed in to change notification settings - Fork 154
/
Copy pathProgressReceiver.js
59 lines (48 loc) · 1.92 KB
/
ProgressReceiver.js
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
/*
NodeODM App and REST API to access ODM.
Copyright (C) 2016 NodeODM Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
"use strict";
const logger = require('./logger');
const dgram = require('dgram');
module.exports = class ProgressReceiver{
constructor(){
const server = dgram.createSocket({type: 'udp4', reuseAddr: true});
this.callbacks = [];
server.on('error', (err) => {
logger.warn(`Progress listener server error: ${err.stack}`);
server.close();
});
server.on('message', (msg) => {
const parts = String(msg).split("/");
if (parts.length === 4){
const cmd = parts[0];
if (cmd === 'PGUP'){
let [_, pid, uuid, globalProgress] = parts;
globalProgress = parseFloat(globalProgress);
if (!isNaN(globalProgress)){
this.callbacks.forEach(callback => callback(uuid, globalProgress));
}
}
}
});
server.on('listening', () => {
const address = server.address();
logger.info(`Listening on ${address.address}:${address.port} UDP for progress updates`);
});
server.bind(6367);
}
addListener(callback){
this.callbacks.push(callback);
}
};