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("A000k #") } 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 };