| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- "use strict";
- const electron = require("electron");
- const path = require("path");
- const utils = require("@electron-toolkit/utils");
- const axios = require("axios");
- const mqtt = require("mqtt");
- const events$1 = require("events");
- const dayjs = require("dayjs");
- const utc = require("dayjs/plugin/utc");
- const AsyncLock = require("async-lock");
- var client;
- const sub_topic1 = "20005000A0001";
- var lock = new AsyncLock();
- var em = new events$1.EventEmitter();
- function mqttClient(mqtt_address, mywindow, hmap2) {
- const clientId = "mqttjs_giga" + Math.random().toString(16).substr(2, 8);
- const host = "mqtt://" + mqtt_address;
- console.log("=======>>>> MQTT Client Start " + host);
- const options = {
- keepalive: 30,
- clientId,
- protocolId: "MQTT",
- protocolVersion: 4,
- clean: true,
- reconnectPeriod: 1e3,
- connectTimeout: 30 * 1e3,
- will: {
- topic: "WillMsg",
- payload: "Connection Closed abnormally..!",
- qos: 0,
- retain: false
- },
- rejectUnauthorized: false
- };
- console.log("start connecting mqtt client....");
- client = mqtt.connect(host, options);
- client.on("error", (err) => {
- console.log("mqtt Connection error: ", err);
- client.end();
- });
- client.on("reconnect", () => {
- console.error("MQTT reconnect");
- });
- client.on("connect", () => {
- console.log("MQTT Client connected : " + clientId + " OK");
- client.subscribe(sub_topic1, {
- qos: 2
- });
- var param = {
- success: true,
- action: "mqttconnect",
- data: {
- status: "0"
- }
- };
- console.log("Send mqtt:connectReply");
- mywindow.webContents.send("mqtt:connectReply", param);
- });
- client.on("offline", () => {
- console.log("MQTT offline");
- var param = {
- success: false,
- action: "mqttconnect",
- data: {
- status: "0"
- }
- };
- console.log("Send mqtt:connectReply");
- mywindow.webContents.send("mqtt:connectReply", param);
- });
- client.on("message", (topic, payload) => {
- console.log("Received Message:", topic, payload.toString());
- var obj = JSON.parse(payload.toString());
- lock.acquire("hmap", () => {
- var hobj = hmap2.get(obj.TimeStamp);
- if (hobj !== void 0) {
- hobj.data = payload.toString();
- hobj.stat = 1;
- hmap2.set(obj.TimeStamp, hobj);
- }
- }).then(function() {
- });
- });
- electron.ipcMain.on("mqtt:publish", function(event, param) {
- console.log("mqttclient(ipcMain) 接收到 mqtt:publish : " + JSON.stringify(param));
- client.publish(param.topic, param.message, {
- qos: 2,
- retain: false
- });
- });
- em.on("mqtt:publish", (param) => {
- console.log("mqttclient(eventEmitter) 接收到 mqtt:publish : " + JSON.stringify(param));
- client.publish(param.topic, param.message, {
- qos: 2,
- retain: false
- });
- });
- }
- function cmsHttpRequest(mywindow, hmap2) {
- electron.ipcMain.on("cms:getMasterDeviceSN", function(event, param) {
- console.log("cmsHttpRequest 接收到 cms:getMasterDeviceSN : " + JSON.stringify(param));
- var url;
- if (param.data.cid.slice(0, 6) == "886235")
- url = "http://intercom.nxt.tw:8006";
- else
- url = "http://aws.gigatech.tw:8006";
- axios.get(url + "/Common/CloudCMS/devices/devicelist.ashx?CID=" + param.data.cid).then((res) => {
- if (res.status == 200 && res.data.success) {
- res.data.data.every((element) => {
- console.log(element);
- var data = element.split(";");
- if (data.length > 3) {
- if (data[2] === "00000000-1") {
- console.log("Master Device SN : " + data[0]);
- return false;
- }
- }
- return true;
- });
- }
- });
- });
- electron.ipcMain.on("cms:loginVerify", function(event, param) {
- console.log("cmsHttpRequest 接收到 cms:loginVerify : " + JSON.stringify(param));
- setImmediate((param2, event2, hmap3, mywindow2) => {
- em.emit("loginverify:Step1", param2, event2, hmap3, mywindow2);
- }, param, event, hmap2, mywindow);
- });
- }
- em.on("convertStep1", (param, num) => {
- console.log("convertStep1...." + param.cid + " , " + param.userID + " , " + param.passwd);
- console.log(num);
- });
- em.on("loginverify:Step1", (param, event, hmap2, mywindow) => {
- var url;
- if (param.data.cid.slice(0, 6) == "886235")
- url = "http://intercom.nxt.tw:8006";
- else
- url = "http://aws.gigatech.tw:8006";
- axios.get(url + "/Common/CloudCMS/devices/devicelist.ashx?CID=" + param.data.cid).then((res) => {
- if (res.status == 200 && res.data.success) {
- res.data.data.every((element) => {
- console.log(element);
- var data = element.split(";");
- if (data.length > 3) {
- if (data[2] === "00000000-1") {
- console.log("Master Device SN : " + data[0]);
- dayjs.extend(utc);
- const ts = dayjs().utc().format("YYYY/MM/DD_HH:mm:ss").toString();
- var querydata = {
- topic: data[0],
- message: '{"action":"mqttqueryMobileList","data":{"Command":"CID=' + param.data.cid + '&ID=00000000","SerialNo":"' + sub_topic1 + '","TimeStamp":"' + ts + '","Token":"FFFFFGIGATECH0529FFFFF"}}'
- };
- var cb_param = {
- stat: 0,
- data: ""
- };
- hmap2.set(ts, cb_param);
- client.publish(querydata.topic, querydata.message, {
- qos: 2,
- retain: false
- });
- var inparam = {
- ts,
- retrycnt: 0,
- cid: param.data.cid,
- userID: param.data.userID,
- vpasswd: param.data.vpasswd,
- passwd: "",
- topic: querydata.topic
- };
- var chkflg = setInterval(function(inparam2) {
- lock.acquire("hmap", () => {
- var hobj = hmap2.get(inparam2.ts);
- if (hobj !== void 0) {
- if (hobj.stat == 1) {
- clearInterval(chkflg);
- var dobj = JSON.parse(hobj.data);
- console.log("===>>>" + dobj.data[0].Password);
- inparam2.passwd = dobj.data[0].Password;
- hmap2.delete(inparam2.ts);
- setImmediate((inparam3, event2, hmap3, mywindow2) => {
- em.emit("loginverify:Step2", inparam3, event2, hmap3, mywindow2);
- }, inparam2, event, hmap2, mywindow);
- } else {
- if (inparam2.retrycnt > 50) {
- clearInterval(chkflg);
- hmap2.delete(inparam2.ts);
- var lparam2 = {
- action: "loginVerifyReply",
- data: {
- code: 404,
- token: ""
- }
- };
- setImmediate((lparam3, event2, hmap3, mywindow2) => {
- em.emit("loginverify:Step3", lparam3, event2, hmap3, mywindow2);
- }, lparam2, event, hmap2, mywindow);
- } else
- inparam2.retrycnt++;
- }
- } else {
- clearInterval(chkflg);
- }
- }).then(function() {
- });
- }, 100, inparam);
- return false;
- }
- }
- return true;
- });
- } else {
- var lparam = {
- action: "loginVerifyReply",
- data: {
- code: 404,
- token: ""
- }
- };
- setImmediate((lparam2, event2, hmap3, mywindow2) => {
- em.emit("loginverify:Step3", lparam2, event2, hmap3, mywindow2);
- }, lparam, event, hmap2, mywindow);
- }
- });
- });
- em.on("loginverify:Step2", (param, event, hmap2, mywindow) => {
- console.log("loginverify:Step2 -> " + param.cid + " , " + param.userID + " , " + param.passwd);
- dayjs.extend(utc);
- const ts = dayjs().utc().format("YYYY/MM/DD_HH:mm:ss").toString();
- var querydata = {
- topic: param.topic,
- message: '{"action":"mqttverifyRemoteKeyAccount","data":{"Command":"User=' + param.userID + "&Account=" + param.cid + "_" + param.userID + "&PassWord=" + param.passwd + "&WebPassword=" + param.vpasswd + '","SerialNo":"' + sub_topic1 + '","TimeStamp":"' + ts + '","Token":"FFFFFGIGATECH0529FFFFF"}}'
- };
- var cb_param = {
- stat: 0,
- data: ""
- };
- hmap2.set(ts, cb_param);
- client.publish(querydata.topic, querydata.message, {
- qos: 2,
- retain: false
- });
- var inparam = {
- ts,
- retrycnt: 0,
- cid: param.cid,
- userID: param.userID,
- vpasswd: param.vpasswd,
- passwd: param.passwd,
- topic: param.topic
- };
- var chkflg = setInterval(function(inparam2) {
- lock.acquire("hmap", () => {
- var hobj = hmap2.get(inparam2.ts);
- if (hobj !== void 0) {
- if (hobj.stat == 1) {
- clearInterval(chkflg);
- console.log(hobj.data);
- var dobj = JSON.parse(hobj.data);
- hmap2.delete(inparam2.ts);
- var lparam = {
- action: "loginVerifyReply",
- data: {
- code: 0,
- token: ""
- }
- };
- if (dobj.success && dobj.data.code == 200) {
- lparam.data.code = dobj.data.code;
- lparam.data.token = dobj.data.token;
- } else {
- lparam.data.code = dobj.data.code;
- }
- setImmediate((lparam2, event2, hmap3, mywindow2) => {
- em.emit("loginverify:Step3", lparam2, event2, hmap3, mywindow2);
- }, lparam, event, hmap2, mywindow);
- } else {
- if (inparam2.retrycnt > 50) {
- clearInterval(chkflg);
- hmap2.delete(lparam.ts);
- var lparam = {
- action: "loginVerifyReply",
- data: {
- code: 404,
- token: ""
- }
- };
- setImmediate((lparam2, event2, hmap3, mywindow2) => {
- em.emit("loginverify:Step3", lparam2, event2, hmap3, mywindow2);
- }, lparam, event, hmap2, mywindow);
- } else
- inparam2.retrycnt++;
- }
- } else {
- clearInterval(chkflg);
- }
- }).then(function() {
- });
- }, 100, inparam);
- });
- em.on("loginverify:Step3", (param, event, hmap2, mywindow) => {
- console.log("loginverify:Step3 -> ", param);
- mywindow.webContents.send("cms:loginVerifyReply", param);
- });
- const events = require("events");
- var varmap = new Array();
- function varSubProc(mywindow) {
- console.log("varSubProc run.....");
- var em2 = new events.EventEmitter();
- em2.on("em:setDate", function(cmd) {
- console.log(cmd);
- var index = cmd.data.name + "-" + cmd.data.user;
- if (cmd.data.type == "Number") {
- varmap[index] = parseInt(cmd.data.value);
- } else if (cmd.data.type == "Float") {
- varmap[index] = parseFloat(cmd.data.value);
- } else {
- varmap[index] = cmd.data.value;
- }
- });
- em2.on("em:getDate", function(cmd) {
- console.log(cmd);
- });
- electron.ipcMain.on("ipc:setData", function(event, cmd) {
- console.log(cmd);
- var index = cmd.data.name + "-" + cmd.data.user;
- if (cmd.data.type == "Number") {
- varmap[index] = parseInt(cmd.data.value);
- } else if (cmd.data.type == "Float") {
- varmap[index] = parseFloat(cmd.data.value);
- } else {
- varmap[index] = cmd.data.value;
- }
- });
- electron.ipcMain.on("ipc:getData", function(event, cmd) {
- var retv;
- console.log(cmd);
- var index = cmd.data.name + "-" + cmd.data.user;
- if (varmap[index] == null) {
- if (cmd.data.type == "Number") {
- retv = 0;
- } else {
- retv = "";
- }
- } else {
- retv = varmap[index];
- }
- var param = {
- success: true,
- action: "getData",
- data: {
- name: cmd.data.name,
- user: cmd.data.user,
- type: cmd.data.type,
- value: retv
- }
- };
- event.sender.send("ipc:getDataReply", param);
- });
- }
- const icon = path.join(__dirname, "../../resources/icon.png");
- const remote = require("@electron/remote/main");
- const HashMap = require("hashmap");
- remote.initialize();
- var hmap = new HashMap();
- function createWindow() {
- const mainWindow = new electron.BrowserWindow({
- width: 900,
- height: 670,
- show: false,
- autoHideMenuBar: true,
- ...process.platform === "linux" ? { icon } : {},
- webPreferences: {
- nodeIntegration: true,
- contextIsolation: false,
- enableRemoteModule: true,
- preload: path.join(__dirname, "../preload/index.js"),
- sandbox: false
- }
- });
- mainWindow.on("ready-to-show", () => {
- mainWindow.show();
- });
- mainWindow.webContents.setWindowOpenHandler((details) => {
- electron.shell.openExternal(details.url);
- return { action: "deny" };
- });
- if (utils.is.dev && process.env["ELECTRON_RENDERER_URL"]) {
- mainWindow.loadURL(process.env["ELECTRON_RENDERER_URL"]);
- } else {
- mainWindow.loadFile(path.join(__dirname, "../renderer/index.html"));
- }
- remote.enable(mainWindow.webContents);
- varSubProc();
- cmsHttpRequest(mainWindow, hmap);
- electron.ipcMain.on("debug-log", (event, message) => {
- console.log(message);
- });
- electron.ipcMain.on("renderer:cmd", (event, message) => {
- if (message === "onMounted") {
- setTimeout(() => {
- mqttClient("iotmqtt.gigatech.tw:1883", mainWindow, hmap);
- }, "1000");
- }
- });
- }
- electron.app.whenReady().then(() => {
- utils.electronApp.setAppUserModelId("com.electron");
- electron.app.on("browser-window-created", (_, window) => {
- utils.optimizer.watchWindowShortcuts(window);
- });
- createWindow();
- electron.app.on("activate", function() {
- if (electron.BrowserWindow.getAllWindows().length === 0)
- createWindow();
- });
- });
- electron.app.on("window-all-closed", () => {
- if (process.platform !== "darwin") {
- electron.app.quit();
- }
- });
|