Files
4.0/src/main/back/sandTable/udpServer.js

173 lines
4.6 KiB
JavaScript
Raw Normal View History

2025-07-03 17:39:09 +08:00
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");
server.on("listening", () => {
const address = server.address();
console.log(`server running ${address.address}:${address.port}`);
});
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)
2025-11-14 09:42:30 +08:00
// ['json','string']
let ModeIndex=1
2025-07-03 17:39:09 +08:00
try {
let positions = [];
2025-11-14 09:42:30 +08:00
var str = msg.toString();
2025-07-03 17:39:09 +08:00
//角度
let angle = 45;
2025-11-14 09:42:30 +08:00
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){
// 点位码
let key=str.slice(0,-1)
// 反馈指令的后缀 K或G
let status=str.split(key)[1]
getmainWindow().webContents.send(
sandTable_udp_server_port+"_str",
key,
status
);
2025-07-03 17:39:09 +08:00
}
2025-11-14 09:42:30 +08:00
2025-07-03 17:39:09 +08:00
// }else{
// console.log("内容不正确");
// }
} catch (err) {
console.log(err);
}
});
server.on("error", (err) => {
console.log("server error", err);
});
2025-11-14 09:42:30 +08:00
console.log("port",port)
2025-07-03 17:39:09 +08:00
server.bind(port);
2025-11-14 09:42:30 +08:00
sendMsg("AFFG")
2025-07-03 17:39:09 +08:00
}
function sendMsg(val) {
let msg;
2025-11-14 09:42:30 +08:00
let port = store.get("sandTable_udp_client_port")||60000;
2025-07-03 17:39:09 +08:00
let ip = store.get("sandTable_udp_client_host");
2025-11-14 09:42:30 +08:00
server.send(val, port, ip);
return
2025-07-03 17:39:09 +08:00
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");
2025-11-14 09:42:30 +08:00
console.log("message",message)
2025-07-03 17:39:09 +08:00
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();
2025-11-14 09:42:30 +08:00
console.log("GetUdpServerPort",port)
2025-07-03 17:39:09 +08:00
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 };