//数据格式 let theme = [ { name: "空中成像", val: "历史" }, { name: "文物互动墙", val: "历史" }, { name: "透明展示柜A", val: "历史" }, { name: "透明展示柜B", val: "历史" }, { name: "AI数字人", val: "历史" }, ]; // 通信数据格式 // 1-切换主题 // {type:'cut',data:{ name: "空中成像", val: "红色" }} -----单个切换 // {type:'cut',data:{ name: "all", val: "红色" }} -----全部切换 // 2-开关 // {type:'switch',data:{ name: "空中成像", val: "open"|"close" }'} --单个开关 // {type:'switch',data:{ name: "all", val: "open"|"close" }'} --全部开关 // 3-透明展示柜 let show = [ { name: "A柜左", val: "1" }, { name: "A柜右", val: "2" }, { name: "B柜左", val: "3" }, { name: "B柜右", val: "4" }, ]; // {type:'show',data:{ name: "A柜右", val: 5 }'} // 4-投屏管理 let screen = [ { name: "户外裸眼3D", val: "open" }, { name: "文物互动墙", val: "close" }, { name: "数字艺术触摸屏", val: "open" }, { name: "AI数字人", val: "open" }, ]; // {type:'screen',data:{ name: "户外裸眼3D", val: "open" }'} const io = require("socket.io")(12345, { pingInterval: 30005, pingTimeout: 5000, upgradeTimeout: 3000, allowUpgrades: true, cookie: false, serveClient: true, }); console.log("Starting Socket.IO server"); io.on("connection", (socket) => { console.log("[" + new Date().toUTCString() + "] game connecting"); socket.emit("UpdateDeviceInfo", { type: "cut", data: theme }); socket.emit("UpdateDeviceInfo", { type: "show", data: show }); socket.emit("UpdateDeviceInfo", { type: "screen", data: screen }); socket.on("ChangeDeviceInfo", (info) => { const { name, val } = info.data; if (info.type === "cut") { theme = theme.map((v) => ({ ...v, val: name === "all" ? val : v.name === name ? val : v.val, })); // 然后向前端广播 数据 {type:'cut',data:theme} io.emit("UpdateDeviceInfo", { type: "cut", data: theme }); } else if (info.type === "show") { show = show.map((v) => ({ ...v, val: v.name === name ? val : v.val, })); // 然后向前端广播 数据 {type:'show',data:show} io.emit("UpdateDeviceInfo", { type: "show", data: show }); } else if (info.type === "screen") { screen = screen.map((v) => ({ ...v, val: v.name === name ? val : v.val, })); // 然后向前端广播 数据 {type:'screen',data:screen} io.emit("UpdateDeviceInfo", { type: "screen", data: screen }); } }); });