123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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(/<<transition_time>>/g, conf.transition_time);
-
- var slideshow = Slideshow(conf.slides, conf.interval);
-
- 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 <<transition_time>>)
- 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 {
- var served = false;
-
- for (var slide of slideshow.getSlides()) {
-
- // If client requests /{slide-name}/*
- if (slide.name === pathname.substr(1, slide.name.length)) {
- slide.serveFiles(parts, res);
- served = true;
- break;
- }
- }
-
- if (!served) {
- res.writeHead(404);
- res.end("404");
- }
- }
- }
-
- 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+".");
|