-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
69 lines (67 loc) · 1.94 KB
/
server.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
var cettia = require("../../lib/index");
var url = require("url");
var http = require("http");
var server = cettia.createServer();
server.on("socket", function(socket) {
socket.on("error", function() {})
.on("abort", function() {
this.close();
})
.on("echo", function(data) {
socket.send("echo", data);
});
// reply
socket.on("/reply/inbound", function(data, reply) {
switch (data.type) {
case "resolved":
reply.resolve(data.data);
break;
case "rejected":
reply.reject(data.data);
break;
}
})
.on("/reply/outbound", function(data) {
switch (data.type) {
case "resolved":
this.send("test", data.data, function(data) {
this.send("done", data);
});
break;
case "rejected":
this.send("test", data.data, null, function(data) {
this.send("done", data);
});
break;
}
});
});
var httpServer = http.createServer();
var httpTransportServer = cettia.transport.createHttpServer();
httpTransportServer.on("transport", server.handle);
httpServer.on("request", function(req, res) {
var urlObj = url.parse(req.url, true);
var query = urlObj.query;
switch (urlObj.pathname) {
case "/setup":
if (query.heartbeat) {
server.setHeartbeat(+query.heartbeat);
}
if (query._heartbeat) {
server.set_heartbeat(+query._heartbeat);
}
res.end();
break;
case "/cettia":
httpTransportServer.handle(req, res);
break;
}
});
var wsTransportServer = cettia.transport.createWebSocketServer();
wsTransportServer.on("transport", server.handle);
httpServer.on("upgrade", function(req, sock, head) {
if (url.parse(req.url).pathname === "/cettia") {
wsTransportServer.handle(req, sock, head);
}
});
httpServer.listen(8000);