192 lines
5.2 KiB
JavaScript
192 lines
5.2 KiB
JavaScript
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 };
|