-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
63 lines (50 loc) · 1.41 KB
/
server.js
File metadata and controls
63 lines (50 loc) · 1.41 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
var fs = require("fs");
var ws = require("ws");
var path = require("path");
var server, sockets = [], files = {};
function read(filename) {
fs.readFile(files[filename], function read(err, data) {
if (err) {
throw err;
}
broadcast(files[filename], data);
});
}
function broadcast (filename, data) {
var socket, i;
for (i = 0; i < sockets.length; i++) {
socket = sockets[i];
if (socket) {
socket.send(JSON.stringify({ "filename": filename, "content": data.toString() }));
}
}
}
module.exports = function (options) {
server = new ws.Server({ "port": options.port });
server.on("connection", function (socket) {
sockets.push(socket);
socket.on("message", function (message) {
console.log('received: %s', message);
});
socket.on("close", function () {
var i;
for (i = 0; i < sockets.length; i++) {
if (sockets[i] === socket) {
delete sockets[i];
}
}
});
for (var file in files) {
read(file);
}
});
for (var name in options.watch) {
var file = options.watch[name];
fs.watch(file, function (event, filename) {
if (filename) {
read(filename);
}
});
files[path.basename(file)] = file;
}
};