重构xuchang-screen,从umi->cra, 计划引入redux
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

server copy.js 2.9 KiB

pirms 5 mēnešiem
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { WebSocket, WebSocketServer } from "ws";
  2. import template from "./template.json";
  3. import utils from "./utils";
  4. const wss = new WebSocketServer({ port: 9800 });
  5. const frequency = 10; // seconds
  6. const frequency1 = 1200; // seconds
  7. wss.on("connection", function (ws, req) {
  8. // console.log("ws", ws);
  9. console.log(
  10. "Client in: ",
  11. req.socket.remoteAddress,
  12. "current users:",
  13. wss.clients.size
  14. );
  15. // ws.on("error", console.error);
  16. // ws.emit("message", "connected");
  17. ws.on("open", function () {
  18. console.log("connected");
  19. ws.send("connected");
  20. });
  21. ws.on("message", function (msg) {
  22. console.log("message from client", msg);
  23. ws.send("echo " + msg.toString());
  24. });
  25. ws.on("error", console.error);
  26. const timer = setInterval(() => {
  27. sendMsg(ws, "kiln-info"); // 窑炉信息
  28. sendMsg(ws, "energy-cost"); // 运行状态
  29. sendMsg(ws, "run-state"); // 运行状态
  30. sendMsg(ws, "realtime");
  31. sendMsg(ws, "his-trend");
  32. // sendMsg(ws, 'gas');
  33. // sendMsg(ws, 'kiln-top');
  34. // sendMsg(ws, 'kiln-bottom');
  35. }, frequency * 1000);
  36. const timer1 = setInterval(() => {
  37. // sendMsg(ws, 'run-state'); // 运行状态
  38. }, frequency1 * 1000);
  39. ws.on("close", function () {
  40. console.log("停止监听");
  41. clearInterval(timer);
  42. clearInterval(timer1);
  43. });
  44. });
  45. function sendMsg(ws, type) {
  46. let data = {};
  47. switch (type) {
  48. case "kiln-info":
  49. for (const key in template.kilnInfo) {
  50. data[key] = utils.getRandom(template.kilnInfo[key]);
  51. }
  52. break;
  53. case "energy-cost":
  54. for (const key in template.energyCost) {
  55. data[key] = utils.getRandom(template.energyCost[key]);
  56. }
  57. break;
  58. case "run-state":
  59. data = template.runState;
  60. data.fireDirection =
  61. Math.floor(Math.random() * 10) % 2 === 0 ? "南火" : "北火";
  62. break;
  63. case "realtime":
  64. /** 天然气 实时流量 */
  65. data.gasii = template.realtime.gasii.map((v) => utils.getRandom(v));
  66. /** 助燃风 实时流量 */
  67. data.wind = template.realtime.wind.map((v) => utils.getRandom(v));
  68. break;
  69. case "his-trend":
  70. const hisTrend = {
  71. gas: {},
  72. wind: {},
  73. };
  74. Object.keys(template.hisTrend.gas).forEach((key) => {
  75. hisTrend.gas[key] = template.hisTrend.gas[key].map((v) =>
  76. utils.getRandom(v)
  77. );
  78. });
  79. Object.keys(template.hisTrend.wind).forEach((key) => {
  80. hisTrend.wind[key] = template.hisTrend.wind[key].map((v) =>
  81. utils.getRandom(v)
  82. );
  83. });
  84. data = hisTrend;
  85. break;
  86. case "gas":
  87. // data = template.gas;
  88. break;
  89. case "kiln-top":
  90. // data = template.kilnTop;
  91. break;
  92. case "kiln-bottom":
  93. // data = template.kilnBottom;
  94. break;
  95. default:
  96. // data = 'You are connected!';
  97. break;
  98. }
  99. ws.send(JSON.stringify({ type, data }));
  100. }