-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathteletask.js
More file actions
104 lines (82 loc) · 2.36 KB
/
Copy pathteletask.js
File metadata and controls
104 lines (82 loc) · 2.36 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
var net = require('net');
var request = require('./lib/request');
var functions = require('./lib/functions');
var settings = require('./lib/settings');
var Report = require('./lib/report');
var util = require('util');
var EventEmitter = require('events').EventEmitter;
exports.functions = functions;
exports.settings = settings;
var connect = function(host, port, callback){
EventEmitter.call(this);
var self = this;
var keepaliveInterval;
socket = new net.Socket();
socket.connect(port, host, function(){
if(typeof callback === 'function'){ callback(); }
keepaliveInterval = setInterval(self.keepalive, 1000);
});
socket.on('data', function(data){
while(data.length !== 0){
if(data[0] == 10){ // Acknowledge
data = data.slice(1);
self.emit("acknowledge");
// clear acknowledge timeout
} else {
try{
var report = Report.parse(data);
self.emit("report", report);
data = data.slice(report.size+1);
} catch (err) {
console.log("Parsing error: " + err);
data = data.slice(1);
}
}
}
});
// should all these functions be set by prototype?????
this.write = function(data, callback){
socket.write(data.toBinary(), callback);
/* var timeout = setTimeout(function(){
throw "Acknowledge timeout (1000ms)";
}, 1000);*/
};
this.set = function(fnc,number, setting, data){
var request = new Set(fnc, number,setting);
this.write(request);
};
this.get = function(fnc, number, callback){
var request = new Get(fnc, number);
this.write(request, function(){
var reportCallback = function(report){
if (typeof callback === "function" &&
number == report.number &&
fnc == functions[report.fnc]
) {
callback(report);
self.removeListener("report", reportCallback);
}
}
self.on("report", reportCallback);
});
};
this.groupget = function(fnc, numbers){
var request = new GroupGet(fnc, numbers);
this.write(request);
};
this.log = function(fnc, status){
var state = (typeof status === 'undefined' || status === true) ? settings.on : settings.off;
var request = new Log(fnc, state);
this.write(request);
};
this.keepalive = function(){
var request = new KeepAlive();
self.write(request);
};
this.close = function(){
socket.end();
clearInterval(keepaliveInterval);
};
};
util.inherits(connect, EventEmitter);
exports.connect = connect;