1 // Set up: npm install
\r
2 var http = require("http"),
\r
4 path = require("path"),
\r
6 open = require("open"),
\r
7 ProtoBuf = require("protobufjs");
\r
9 // Copy dependencies to "www/" (example specific, you usually don't have to care
\r
11 ["Long.min.js", "./node_modules/long/dist/Long.min.js"],
\r
12 ["ByteBufferAB.min.js", "./node_modules/bytebuffer/dist/ByteBufferAB.min.js"],
\r
13 ["ProtoBuf.min.js", "./node_modules/protobufjs/dist/ProtoBuf.min.js"]
\r
15 for (var i=0, dep, data; i<deps.length; i++) {
\r
17 if (!fs.existsSync(path.join(__dirname, "www", dep[0]))) {
\r
18 console.log("Copying "+dep[0]+" from "+dep[1]);
\r
20 fs.writeFileSync(path.join(__dirname, "www", dep[0]), fs.readFileSync(path.join(__dirname, dep[1])));
\r
22 console.log("Copying failed: "+err.message);
\r
23 console.log("\nDid you run `npm install` ?");
\r
29 // Initialize from .proto file
\r
30 var builder = ProtoBuf.loadProtoFile(path.join(__dirname, "www", "example.proto")),
\r
31 Message = builder.build("Message");
\r
34 var server = http.createServer(function(req, res) {
\r
37 if (req.url == "/") {
\r
38 file = "index.html";
\r
39 } else if (/^\/(\w+(?:\.min)?\.(?:js|html|proto))$/.test(req.url)) {
\r
40 file = req.url.substring(1);
\r
41 if (/\.js$/.test(file)) {
\r
42 type = "text/javascript";
\r
46 fs.readFile(path.join(__dirname, "www", file), function(err, data) {
\r
48 res.writeHead(500, {"Content-Type": type});
\r
49 res.end("Internal Server Error: "+err);
\r
51 res.writeHead(200, {"Content-Type": type});
\r
54 console.log("Served www/"+file);
\r
58 res.writeHead(404, {"Content-Type": "text/html"});
\r
59 res.end("Not Found");
\r
62 server.listen(8080);
\r
63 server.on("listening", function() {
\r
64 console.log("Server started");
\r
65 open("http://localhost:8080/");
\r
67 server.on("error", function(err) {
\r
68 console.log("Failed to start server:", err);
\r
72 // WebSocket adapter
\r
73 var wss = new ws.Server({server: server});
\r
74 wss.on("connection", function(socket) {
\r
75 console.log("New WebSocket connection");
\r
76 socket.on("close", function() {
\r
77 console.log("WebSocket disconnected");
\r
79 socket.on("message", function(data, flags) {
\r
82 // Decode the Message
\r
83 var msg = Message.decode(data);
\r
84 console.log("Received: "+msg.text);
\r
85 // Transform the text to upper case
\r
86 msg.text = msg.text.toUpperCase();
\r
87 // Re-encode it and send it back
\r
88 socket.send(msg.toBuffer());
\r
89 console.log("Sent: "+msg.text);
\r
91 console.log("Processing failed:", err);
\r
94 console.log("Not binary data");
\r