Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / grpc-cloned / node_modules / protobufjs / examples / websocket / server.js
diff --git a/legacy-libs/grpc-cloned/node_modules/protobufjs/examples/websocket/server.js b/legacy-libs/grpc-cloned/node_modules/protobufjs/examples/websocket/server.js
new file mode 100644 (file)
index 0000000..514cb15
--- /dev/null
@@ -0,0 +1,97 @@
+// Set up: npm install\r
+var http = require("http"),\r
+    fs = require("fs"),\r
+    path = require("path"),\r
+    ws = require("ws"),\r
+    open = require("open"),\r
+    ProtoBuf = require("protobufjs");\r
+\r
+// Copy dependencies to "www/" (example specific, you usually don't have to care\r
+var deps = [\r
+      ["Long.min.js", "./node_modules/long/dist/Long.min.js"],\r
+      ["ByteBufferAB.min.js", "./node_modules/bytebuffer/dist/ByteBufferAB.min.js"],\r
+      ["ProtoBuf.min.js", "./node_modules/protobufjs/dist/ProtoBuf.min.js"]\r
+];\r
+for (var i=0, dep, data; i<deps.length; i++) {\r
+    dep = deps[i];\r
+    if (!fs.existsSync(path.join(__dirname, "www", dep[0]))) {\r
+        console.log("Copying "+dep[0]+" from "+dep[1]);\r
+        try {\r
+            fs.writeFileSync(path.join(__dirname, "www", dep[0]), fs.readFileSync(path.join(__dirname, dep[1])));\r
+        } catch (err) {\r
+            console.log("Copying failed: "+err.message);\r
+            console.log("\nDid you run `npm install` ?");\r
+            process.exit(1);\r
+        }\r
+    }\r
+}\r
+\r
+// Initialize from .proto file\r
+var builder = ProtoBuf.loadProtoFile(path.join(__dirname, "www", "example.proto")),\r
+    Message = builder.build("Message");\r
+\r
+// HTTP server\r
+var server = http.createServer(function(req, res) {\r
+        var file = null,\r
+            type = "text/html";\r
+        if (req.url == "/") {\r
+            file = "index.html";\r
+        } else if (/^\/(\w+(?:\.min)?\.(?:js|html|proto))$/.test(req.url)) {\r
+            file = req.url.substring(1);\r
+            if (/\.js$/.test(file)) {\r
+                type = "text/javascript";\r
+            }\r
+        }\r
+        if (file) {\r
+            fs.readFile(path.join(__dirname, "www", file), function(err, data) {\r
+                if (err) {\r
+                    res.writeHead(500, {"Content-Type": type});\r
+                    res.end("Internal Server Error: "+err);\r
+                } else {\r
+                    res.writeHead(200, {"Content-Type": type});\r
+                    res.write(data);\r
+                    res.end();\r
+                    console.log("Served www/"+file);\r
+                }\r
+            });\r
+        } else {\r
+            res.writeHead(404, {"Content-Type": "text/html"});\r
+            res.end("Not Found");\r
+        }\r
+    });\r
+server.listen(8080);\r
+server.on("listening", function() {\r
+    console.log("Server started");\r
+    open("http://localhost:8080/");\r
+});\r
+server.on("error", function(err) {\r
+    console.log("Failed to start server:", err);\r
+    process.exit(1);\r
+});\r
+\r
+// WebSocket adapter\r
+var wss = new ws.Server({server: server});\r
+wss.on("connection", function(socket) {\r
+    console.log("New WebSocket connection");\r
+    socket.on("close", function() {\r
+        console.log("WebSocket disconnected");\r
+    });\r
+    socket.on("message", function(data, flags) {\r
+        if (flags.binary) {\r
+            try {\r
+                // Decode the Message\r
+                var msg = Message.decode(data);\r
+                console.log("Received: "+msg.text);\r
+                // Transform the text to upper case\r
+                msg.text = msg.text.toUpperCase();\r
+                // Re-encode it and send it back\r
+                socket.send(msg.toBuffer());\r
+                console.log("Sent: "+msg.text);\r
+            } catch (err) {\r
+                console.log("Processing failed:", err);\r
+            }\r
+        } else {\r
+            console.log("Not binary data");\r
+        }\r
+    });\r
+});\r