Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / grpc-cloned / node_modules / protobufjs / examples / websocket / server.js
1 // Set up: npm install\r
2 var http = require("http"),\r
3     fs = require("fs"),\r
4     path = require("path"),\r
5     ws = require("ws"),\r
6     open = require("open"),\r
7     ProtoBuf = require("protobufjs");\r
8 \r
9 // Copy dependencies to "www/" (example specific, you usually don't have to care\r
10 var deps = [\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
14 ];\r
15 for (var i=0, dep, data; i<deps.length; i++) {\r
16     dep = deps[i];\r
17     if (!fs.existsSync(path.join(__dirname, "www", dep[0]))) {\r
18         console.log("Copying "+dep[0]+" from "+dep[1]);\r
19         try {\r
20             fs.writeFileSync(path.join(__dirname, "www", dep[0]), fs.readFileSync(path.join(__dirname, dep[1])));\r
21         } catch (err) {\r
22             console.log("Copying failed: "+err.message);\r
23             console.log("\nDid you run `npm install` ?");\r
24             process.exit(1);\r
25         }\r
26     }\r
27 }\r
28 \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
32 \r
33 // HTTP server\r
34 var server = http.createServer(function(req, res) {\r
35         var file = null,\r
36             type = "text/html";\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
43             }\r
44         }\r
45         if (file) {\r
46             fs.readFile(path.join(__dirname, "www", file), function(err, data) {\r
47                 if (err) {\r
48                     res.writeHead(500, {"Content-Type": type});\r
49                     res.end("Internal Server Error: "+err);\r
50                 } else {\r
51                     res.writeHead(200, {"Content-Type": type});\r
52                     res.write(data);\r
53                     res.end();\r
54                     console.log("Served www/"+file);\r
55                 }\r
56             });\r
57         } else {\r
58             res.writeHead(404, {"Content-Type": "text/html"});\r
59             res.end("Not Found");\r
60         }\r
61     });\r
62 server.listen(8080);\r
63 server.on("listening", function() {\r
64     console.log("Server started");\r
65     open("http://localhost:8080/");\r
66 });\r
67 server.on("error", function(err) {\r
68     console.log("Failed to start server:", err);\r
69     process.exit(1);\r
70 });\r
71 \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
78     });\r
79     socket.on("message", function(data, flags) {\r
80         if (flags.binary) {\r
81             try {\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
90             } catch (err) {\r
91                 console.log("Processing failed:", err);\r
92             }\r
93         } else {\r
94             console.log("Not binary data");\r
95         }\r
96     });\r
97 });\r