/
index.js
97 lines (75 loc) · 2.46 KB
/
index.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//require('v8-profiler');
var net = require('net');
var fs = require('fs');
var events = require('events');
var util = require('util');
var connection = require('./connection');
var LocationIo = function() {
events.EventEmitter.call(this);
};
util.inherits(LocationIo, events.EventEmitter);
LocationIo.prototype.protocolModules = require('./modules');
LocationIo.prototype.createServer = function(port, callback) {
var self = this;
var emitFunction = function() {
self.emit.apply(self, arguments);
};
var server = net.createServer();
this.sockets = {};
server.on('connection', function(socket) {
connection.attachSocket(socket, socket, self.protocolModules, emitFunction);
var socketKey = socket.remoteAddress + ":" + socket.remotePort;
self.sockets[socketKey] = socket;
socket.on('close', function() {
delete self.sockets[socketKey];
});
});
server.listen(port, function(err) {
emitFunction('server-up', err);
if (callback) {
callback(err);
}
callback = undefined;
});
server.on('error', function(err) {
if (callback) {
callback(err);
} else {
emitFunction('error', err);
}
callback = undefined;
});
this.server = server;
};
LocationIo.prototype.sendMessage = function(trackerId, messageName, commandParameters, callback) {
console.log('trackerId ' + trackerId);
var socket = this.findConnectionById(trackerId);
if (socket === undefined) {
setImmediate(function() {
callback('unknown tracker');
});
} else {
connection.sendMessage(socket, socket, messageName, commandParameters, callback);
}
};
LocationIo.prototype.findConnectionById = function (id) {
console.log('finding tracker id ' + id);
for (var socketName in this.sockets) {
var socket = this.sockets[socketName];
console.log('testing connection ' + socket.id);
if (socket.id == id) {
return socket;
}
}
};
LocationIo.prototype.getApi = function(protocolName) {
console.log('protocol name ' + protocolName);
console.log(protocolName);
console.log(this.protocolModules);
return this.protocolModules[protocolName].api;
};
LocationIo.prototype.close = function(callback) {
//console.log('closing server');
this.server.close(callback);
};
module.exports = LocationIo;