var fs = require("fs"); var http = require("http"); var crypto = require("crypto"); var pathlib = require("path"); var urllib = require("url"); var Slideshow = require("./js/slideshow"); var fileserver = require("./js/fileserver"); var admin = require("./js/admin"); var error = require("./js/error"); var conf = JSON.parse(fs.readFileSync("conf.json")); var index = fs.readFileSync("web/index.html", "utf-8") .replace(/<>/g, conf.transition_time); var slideshow = Slideshow(conf.slides, conf.interval); admin.init(slideshow); function onexit(code) { console.log("exiting", code); slideshow.sendEvent("reload"); process.exit(); } process.on("exit", onexit); process.on("SIGINT", onexit); process.on("SIGTERM", onexit); process.on("uncaughtException", onexit); function handler(req, res) { var parts = urllib.parse(req.url); var pathname = parts.pathname; // Serve index.html (not part of fileserver because the // substitution of <>) if (pathname === "/") { res.end(index); // Send various files from web/ to the client } else if (fileserver.canServe(parts)) { fileserver.serve(parts, res); // /init: send initial information about current slide } else if (pathname === "/init") { res.end(slideshow.getSlideName()); // /await: long polling, request won't end before a new slide comes } else if (pathname === "/await") { slideshow.pushAwaiter(res); // /admin/*: respond to admin queries } else if (admin.canServe(parts)) { admin.serve(parts, conf, req, res); // Serve slide files } else { slideshow.serve(parts, res); } } var server = http.createServer(handler); server.on("error", err => { console.error(err); system.exit(1); }); server.listen(conf.port); console.log("Server running on port "+conf.port+".");