-
Notifications
You must be signed in to change notification settings - Fork 0
/
er-app-ws-datarate.js
77 lines (64 loc) · 1.98 KB
/
er-app-ws-datarate.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
* patch a websocket to get data rate
*/
function patch_callback(object, function_name, callback) {
var orig_function = object[function_name];
object[function_name] = function(...args) {
callback.apply(this, args);
return orig_function.apply(this, args);
};
};
const EventEmitter = require('events');
const wsc = require('./router_websocket_client');
const router = require('./router').router;
const PacketEvent = new EventEmitter();
// Listen: sendjson_raw || respond
patch_callback(wsc.pWebSocket.prototype, "sendjson_raw", function(message) {
PacketEvent.emit("client.send", message.length);
//datarate_send += message.length;
});
// Listen: recvjson || router.process_single_message
patch_callback(wsc.pWebSocket.prototype, "recvjson", function(message) {
PacketEvent.emit("client.recv", message.length);
//datarate_recv += message.length;
});
exports.init = function(node, app_config, main) {
var _this = this;
var interval_stat = 1;
if (typeof app_config.interval_stat === "number") {
interval_stat = app_config.interval_stat;
}
// init nodes:
node.announce({
"type": "packages-count.data"
});
var node2 = node.node("send");
node2.announce({
"type": "packages-count.data"
});
// count packets:
var datarate_send = 0;
var datarate_recv = 0;
var onsend = function(message_length) {
datarate_send += message_length;
};
PacketEvent.on("client.send", onsend);
var onrecv = function(message_length) {
datarate_recv += message_length;
};
PacketEvent.on("client.recv", onrecv);
let t = process.hrtime();
var tid = setInterval(function() {
var diff = process.hrtime(t);
var delta = diff[0] * 1e9 + diff[1];
node.publish(undefined, datarate_recv / delta * 1e9);
node2.publish(undefined, datarate_send / delta * 1e9);
datarate_send = 0;
datarate_recv = 0;
t = process.hrtime();
}, interval_stat*1000);
return [tid, node, node2, function() {
PacketEvent.removeListener("client.send", onsend);
PacketEvent.removeListener("client.recv", onrecv);
}];
}