Files
4.0/src/main/back/sandTable/udpServer.js
2025-11-25 11:57:28 +08:00

192 lines
5.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {ipcRenderer} from "electron";
const dgram = require("dgram");
import { getmainWindow } from "../../index";
let server;
let Store = require("electron-store");
let store = new Store();
let sandTable_udp_server_port = "sandTable_udp_server_port";
function Init() {
if (server) {
server.close();
server = null;
}
let port = GetUdpServerPort().port; //获取本地存储的udp端口
server = dgram.createSocket("udp4");
console.log("udp的port",port)
console.log("udp的server",server)
server.on("listening", () => {
const address = server.address();
console.log(`server running ${address.address}:${address.port}`);
getmainWindow().webContents.send('udpServerSuccess',"udp服务创建成功")
});
server.on("message", (msg, remoteInfo) => {
console.log(
`udp server got ${msg} from ${remoteInfo.address}:${remoteInfo.port}`
);
// logger.info(msg.toString())
// server.send('world', remoteInfo.port, remoteInfo.address)
// ['json','string']
let ModeIndex=1
try {
let positions = [];
var str = msg.toString();
//角度
let angle = 45;
if(ModeIndex==0){
let s=JSON.parse(str)
if (typeof s == "string") s = JSON.parse(s);
console.log(s);
// if(s.hasOwnProperty("Placemark")){
if (s.Placemark.hasOwnProperty("Point")) {
let arr = s.Placemark.Point.coordinates.split(",");
let position = {
lng: Number(arr[0]),
lat: Number(arr[1]),
alt: Number(arr[2]) || 0,
};
if (arr.length > 2) position.alt = arr[2];
if (arr.length > 3) angle = arr[3];
positions.push(position);
} else
{
let coordinates =
s.Placemark.Polygon.outerBoundaryIs.LinearRing.coordinates;
const parseCoordinates = (coords) => {
return coords.split(" ").map((pair) => {
const [lng, lat] = pair.split(",").map(Number);
return { lng, lat };
});
};
positions = parseCoordinates(coordinates);
}
getmainWindow().webContents.send(
sandTable_udp_server_port,
positions,
angle
);
}else if(ModeIndex==1){
// 点位码 001K
/* let key=str.slice(0,-1)
// 反馈指令的后缀 K或G
let status=str.split(key)[1]
getmainWindow().webContents.send(
sandTable_udp_server_port+"_str",
key,
status
);*/
// 点位码 A001g #
let key=str.slice(0,-3)
// 反馈指令的后缀 g #或k #
let status=str.split(key)[1];
getmainWindow().webContents.send(
sandTable_udp_server_port+"_str",
key,
status
);
}
// }else{
// console.log("内容不正确");
// }
} catch (err) {
console.log(err);
}
});
server.on("error", (err) => {
console.log("server error", err);
getmainWindow().webContents.send('udpServerError',"udp服务创建失败尝试更换端口")
});
console.log("port ",port)
server.bind(port);
// sendMsg("AFFG")
sendMsg("A000g #")
}
function sendMsg(val) {
let msg;
let port = store.get("sandTable_udp_client_port")||60000;
let ip = store.get("sandTable_udp_client_host");
server.send(val, port, ip);
return
let num = val.toString().split("");
let swit = Number(num.pop());
if (swit == 1 || swit == 0) {
let cnt = num.join("");
if (cnt == "FF") {
const message = Buffer.from([0xff, Number(swit)]);
server.send(message, port, ip);
msg = "发送成功";
} else {
let exp = /^[+-]?\d*(\.\d*)?(e[+-]?\d+)?$/;
if (exp.test(cnt)) {
let cntHex = cnt.toString(16);
let switHex = swit.toString(16);
const message = Buffer.from([cntHex, switHex], "hex");
console.log("message",message)
server.send(message, port, ip);
msg = "发送成功";
} else {
msg = "接受失败";
}
}
}
return msg;
}
/*更新udpserver端口*/
function UpdateUdpServerPort(port) {
store.set(sandTable_udp_server_port, port);
//写进本地缓存
//重新启动udpserver
Init();
}
/*获取本地主机端口*/
function GetUdpServerPort() {
//从本地缓存获取
let port = 6000;
let server_port = store.get(sandTable_udp_server_port);
if (!server_port) {
store.set(sandTable_udp_server_port, port);
} else {
port = server_port;
}
let host = getHostIP();
console.log("GetUdpServerPort",port)
return { port, host };
}
function getHostIP() {
const os = require("os");
const interfaces = os.networkInterfaces();
let hostIP = "";
console.log(interfaces);
for (const networkInterface in interfaces) {
if (networkInterface.indexOf("以太网") > -1) {
const iface = interfaces[networkInterface];
for (let i = 0; i < iface.length; i++) {
const { address, family, internal } = iface[i];
if (family === "IPv4" && !internal) {
hostIP = address;
break;
}
}
if (hostIP) {
break;
}
}
}
return hostIP;
}
export { GetUdpServerPort, UpdateUdpServerPort, Init, sendMsg };