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 };
|