NeiMengGuServer.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //数据格式
  2. let theme = [
  3. { name: "空中成像", val: "历史" },
  4. { name: "文物互动墙", val: "历史" },
  5. { name: "透明展示柜A", val: "历史" },
  6. { name: "透明展示柜B", val: "历史" },
  7. { name: "AI数字人", val: "历史" },
  8. ];
  9. // 通信数据格式
  10. // 1-切换主题
  11. // {type:'cut',data:{ name: "空中成像", val: "红色" }} -----单个切换
  12. // {type:'cut',data:{ name: "all", val: "红色" }} -----全部切换
  13. // 2-开关
  14. // {type:'switch',data:{ name: "空中成像", val: "open"|"close" }'} --单个开关
  15. // {type:'switch',data:{ name: "all", val: "open"|"close" }'} --全部开关
  16. // 3-透明展示柜
  17. let show = [
  18. { name: "A柜左", val: "1" },
  19. { name: "A柜右", val: "2" },
  20. { name: "B柜左", val: "3" },
  21. { name: "B柜右", val: "4" },
  22. ];
  23. // {type:'show',data:{ name: "A柜右", val: 5 }'}
  24. // 4-投屏管理
  25. let screen = [
  26. { name: "户外裸眼3D", val: "open" },
  27. { name: "文物互动墙", val: "close" },
  28. { name: "数字艺术触摸屏", val: "open" },
  29. { name: "AI数字人", val: "open" },
  30. ];
  31. // {type:'screen',data:{ name: "户外裸眼3D", val: "open" }'}
  32. const io = require("socket.io")(12345, {
  33. pingInterval: 30005,
  34. pingTimeout: 5000,
  35. upgradeTimeout: 3000,
  36. allowUpgrades: true,
  37. cookie: false,
  38. serveClient: true,
  39. });
  40. console.log("Starting Socket.IO server");
  41. io.on("connection", (socket) => {
  42. console.log("[" + new Date().toUTCString() + "] game connecting");
  43. socket.emit("UpdateDeviceInfo", { type: "cut", data: theme });
  44. socket.emit("UpdateDeviceInfo", { type: "show", data: show });
  45. socket.emit("UpdateDeviceInfo", { type: "screen", data: screen });
  46. socket.on("ChangeDeviceInfo", (info) => {
  47. const { name, val } = info.data;
  48. if (info.type === "cut") {
  49. theme = theme.map((v) => ({
  50. ...v,
  51. val: name === "all" ? val : v.name === name ? val : v.val,
  52. }));
  53. // 然后向前端广播 数据 {type:'cut',data:theme}
  54. io.emit("UpdateDeviceInfo", { type: "cut", data: theme });
  55. } else if (info.type === "show") {
  56. show = show.map((v) => ({
  57. ...v,
  58. val: v.name === name ? val : v.val,
  59. }));
  60. // 然后向前端广播 数据 {type:'show',data:show}
  61. io.emit("UpdateDeviceInfo", { type: "show", data: show });
  62. } else if (info.type === "screen") {
  63. screen = screen.map((v) => ({
  64. ...v,
  65. val: v.name === name ? val : v.val,
  66. }));
  67. // 然后向前端广播 数据 {type:'screen',data:screen}
  68. io.emit("UpdateDeviceInfo", { type: "screen", data: screen });
  69. }
  70. });
  71. });