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 | var addr = "127.0.0.1";
|
36 | var port = 3000;
|
37 |
|
38 | var net = require('net');
|
39 | var dgram = require('dgram');
|
40 | var express = require('express');
|
41 | var form = require('connect-form');
|
42 |
|
43 | var loaded = [];
|
44 |
|
45 | var modules = ["app/banshee", "app/frontrow", "app/itunes", "app/mpd",
|
46 | "app/quicktime", "app/rhythmbox", "app/totem",
|
47 | "sys/1-wire", "sys/input", "sys/sound", "sys/surveillance"];
|
48 |
|
49 |
|
50 |
|
51 | console.log("Home Control server: starting");
|
52 |
|
53 | var socket = net.createConnection(80, 'www.google.com');
|
54 |
|
55 | socket.on('connect', function() {
|
56 |
|
57 | addr = socket.address().address;
|
58 |
|
59 | var ssd_srv = dgram.createSocket("udp4");
|
60 |
|
61 | ssd_srv.on("message", function (msg, rinfo) {
|
62 | console.log("Received SSD message: " + rinfo.address + ":" + rinfo.port);
|
63 |
|
64 | if(msg.slice(0, 8) == "M-SEARCH") {
|
65 | var message = new Buffer(
|
66 | "HTTP/1.1 200 OK\r\n" +
|
67 | "LOCATION: http://" + addr + ":" + port + "/\r\n" +
|
68 | "SERVER: Home Control\r\n" +
|
69 | "ST: " +
|
70 | "EXT: " +
|
71 | "\r\n"
|
72 | );
|
73 |
|
74 | console.log("Sending SSD message: " + addr + ":" + port);
|
75 |
|
76 | var client = dgram.createSocket("udp4");
|
77 |
|
78 | client.send(message, 0, message.length, rinfo.port, rinfo.address);
|
79 |
|
80 | client.close();
|
81 | }
|
82 | });
|
83 |
|
84 | ssd_srv.bind(1900);
|
85 |
|
86 | try {
|
87 | ssd_srv.addMembership('239.255.255.250');
|
88 | } catch (error) {
|
89 | console.log("Automatic discovery: disabled");
|
90 | }
|
91 |
|
92 | socket.end();
|
93 | });
|
94 |
|
95 | var http_srv = express.createServer(
|
96 | form({ keepExtensions: true })
|
97 | );
|
98 |
|
99 | http_srv.get("/modules", function(req, res) {
|
100 | res.send(loaded);
|
101 | });
|
102 |
|
103 | for(var i = 0; i < modules.length; i++) {
|
104 | var module = require("./lib/" + modules[i]);
|
105 |
|
106 | module.setup(function(module, moduleID, moduleName, moduleCategory) {
|
107 | if((moduleID) && (moduleName) && (moduleCategory)) {
|
108 | console.log("Loading " + moduleCategory + " module: " + moduleName);
|
109 |
|
110 | http_srv.get("/" + moduleID + "/*", module.execute);
|
111 |
|
112 | http_srv.post("/" + moduleID + "/*", module.execute);
|
113 |
|
114 | loaded.push({id: moduleID, name: moduleName, category: moduleCategory});
|
115 | }
|
116 | }.bind(this, module));
|
117 | }
|
118 |
|
119 | http_srv.listen(port);
|
120 |
|