Repository navigation
Expand file tree
/
Copy pathsocket.js
More file actions
66 lines (52 loc) · 1.52 KB
/
Copy pathsocket.js
File metadata and controls
66 lines (52 loc) · 1.52 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
var Q = require('q');
var _ = require('lodash');
var sockjs = require('sockjs');
var events = require('events');
var logger = require('./utils/logger')("socket");
var services = {};
var init = function(server, config) {
var socket = sockjs.createServer({
log: logger.log.bind(logger)
});
socket.on('connection', function(conn) {
var service = (conn.pathname.split("/"))[2];
logger.log("connection to service '"+service+"'");
if (!services[service]) {
conn.close(404, "Service not found");
return logger.error("invalid service '"+service+"'");
}
conn.do = function(method, data) {
this.write(JSON.stringify({
'method': method,
'data': data
}));
}.bind(conn);
conn.on("data", function(data) {
try {
data = JSON.parse(data);
} catch(e) {
logger.error("error parsing data:", data);
return;
}
if (data.method) {
conn.emit("do."+data.method, data.data || {});
} else {
conn.emit("message", data);
}
});
services[service].handler(conn);
});
socket.installHandlers(server, {
prefix: '^/socket/(\\w+)'
});
};
var addService = function(name, handler) {
logger.log("add service", name);
services[name] = {
handler: handler
};
};
module.exports = {
init: init,
service: addService
};