-
Notifications
You must be signed in to change notification settings - Fork 1
/
draggieserver.js
68 lines (61 loc) · 1.93 KB
/
draggieserver.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
var sys = require('sys'),
http = require('http'),
fs = require('fs'),
json = require('./json'),
faye = require('./faye');
var comet = new faye.NodeAdapter({mount: '/fayeclient', timeout: 45}),
client = comet.getClient();
// setup sync client; TODO move into a separate module
var state = {};
client.subscribe('/general', function(message) {
// TODO discard malformed messages
if (!message.client || !message.type) return;
sys.puts('sync noticed message from client ' + message.client);
sys.puts('message type == ' + message.type);
switch (message.type) {
case 'place' :
state[message.el] || (state[message.el] = {});
process.mixin(state[message.el], {
x: message.x,
y: message.y
});
break;
case 'text' :
process.mixin(state[message.el], {
text: message.text,
});
break;
case 'delete' :
delete state[message.el];
break;
}
sys.puts("state: ");
sys.puts(json.stringify(state));
});
var port = 80;
sys.puts('Listening on ' + port);
http.createServer(function(req, resp) {
sys.puts(req.method + ' ' + req.url);
if (comet.call(req, resp)) {
sys.puts('** Handled by faye');
return;
}
var path = (req.url === '/') ? '/index.html' : req.url;
if (path === '/sync') {
sys.puts('** Handled by syncserver');
resp.sendHeader(200, {'Content-Type': 'text/html'});
resp.write(json.stringify(state));
resp.close();
return;
}
sys.puts('** Handled by file server');
fs.readFile('./static/' + path).addCallback(function(content) {
resp.sendHeader(200, {'Content-Type': 'text/html'});
resp.write(content);
resp.close();
}).addErrback(function(){
resp.sendHeader(404, {'Content-Type': 'text/html'});
resp.write('<html><head><title>404 not found</title></head><body>404 Not Found</body></html>');
resp.close();
});
}).listen(port);