Pictures!
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

server.js 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. var fs = require("fs");
  2. var http = require("http");
  3. var crypto = require("crypto");
  4. var pathlib = require("path");
  5. var urllib = require("url");
  6. var Slideshow = require("./js/slideshow");
  7. var fileserver = require("./js/fileserver");
  8. var admin = require("./js/admin");
  9. var error = require("./js/error");
  10. var conf = JSON.parse(fs.readFileSync("conf.json"));
  11. var index = fs.readFileSync("web/index.html", "utf-8")
  12. .replace(/<<transition_time>>/g, conf.transition_time);
  13. var slideshow = Slideshow(conf.slides, conf.interval);
  14. function onexit(code) {
  15. console.log("exiting", code);
  16. slideshow.sendEvent("reload");
  17. process.exit();
  18. }
  19. process.on("exit", onexit);
  20. process.on("SIGINT", onexit);
  21. process.on("SIGTERM", onexit);
  22. process.on("uncaughtException", onexit);
  23. function handler(req, res) {
  24. var parts = urllib.parse(req.url);
  25. var pathname = parts.pathname;
  26. // Serve index.html (not part of fileserver because the
  27. // substitution of <<transition_time>>)
  28. if (pathname === "/") {
  29. res.end(index);
  30. // Send various files from web/ to the client
  31. } else if (fileserver.canServe(parts)) {
  32. fileserver.serve(parts, res);
  33. // /init: send initial information about current slide
  34. } else if (pathname === "/init") {
  35. res.end(slideshow.getSlideName());
  36. // /await: long polling, request won't end before a new slide comes
  37. } else if (pathname === "/await") {
  38. slideshow.pushAwaiter(res);
  39. // /admin/*: respond to admin queries
  40. } else if (admin.canServe(parts)) {
  41. admin.serve(parts, conf, req, res);
  42. // Serve slide files
  43. } else {
  44. var served = false;
  45. for (var slide of slideshow.getSlides()) {
  46. // If client requests /{slide-name}/*
  47. if (slide.name === pathname.substr(1, slide.name.length)) {
  48. slide.serveFiles(parts, res);
  49. served = true;
  50. break;
  51. }
  52. }
  53. if (!served) {
  54. res.writeHead(404);
  55. res.end("404");
  56. }
  57. }
  58. }
  59. var server = http.createServer(handler);
  60. server.on("error", err => {
  61. console.error(err);
  62. system.exit(1);
  63. });
  64. server.listen(conf.port);
  65. console.log("Server running on port "+conf.port+".");