From 52fcf36644a38857afea61f06a5bba5f8ce6bb86 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Sun, 9 Oct 2022 14:31:07 +0200 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20api=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.svelte | 366 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 243 insertions(+), 123 deletions(-) diff --git a/src/App.svelte b/src/App.svelte index 11f4e21..adbabd6 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -66,15 +66,6 @@ dev: false, }; - let parcedFlags = { - deviceListJson: false, - ssidJson: false, - errorsJson: false, - settingsJson: false, - statusJson: false, - paramsJson: false, - }; - let systemReady = false; //update esp @@ -82,21 +73,13 @@ let choosingVersion = undefined; //JSON Files==================================== - let configJson = []; - let widgetsJson = []; let itemsJson = []; + let widgetsJson = []; + let configJson = []; let scenarioTxt = ""; - - let chartJsonFlag = {}; - let layoutJsonFlag = {}; - //=============================================== - - let layoutJson = []; let settingsJson = {}; - let errorsJson = {}; let ssidJson = {}; - let paramsJson = {}; - let incDeviceList = []; + let errorsJson = {}; let deviceList = []; deviceList = [ { @@ -107,6 +90,30 @@ status: false, }, ]; + let incDeviceList = []; + + ////////////////////////////////// + let layoutJson = []; + + let paramsJson = {}; + + let parsed = { + itemsJson: false, + widgetsJson: false, + configJson: false, + scenarioTxt: false, + settingsJson: false, + ssidJson: false, + incDeviceList: false, + deviceListJson: false, + errorsJson: false, + statusJson: false, + paramsJson: false, + }; + + let chartJsonFlag = {}; + let layoutJsonFlag = {}; + //=============================================== //web sockets let socket = []; @@ -360,68 +367,67 @@ let data = event.data; if (ws === selectedWs) { //сборщик deviceList сообщений - if (data.includes('devicelist_":"')) { - if (IsJsonParse(data)) { - incDeviceList = JSON.parse(data); - incDeviceList = incDeviceList; - if (firstDevListRequest) { - deviceList = incDeviceList; - deviceList[0].status = true; - } else { - deviceList = combineArrays(deviceList, incDeviceList); - } - firstDevListRequest = false; - deviceList = deviceList; - parcedFlags.deviceListJson = true; - if (debug) console.log("✔ S", "deviceList parced"); - onParced(); - whenDeviceListWasUpdated(); - connectToAllDevices(); - } - } + //if (data.includes('devicelist_":"')) { + // if (IsJsonParse(data)) { + // incDeviceList = JSON.parse(data); + // incDeviceList = incDeviceList; + // if (firstDevListRequest) { + // deviceList = incDeviceList; + // deviceList[0].status = true; + // } else { + // deviceList = combineArrays(deviceList, incDeviceList); + // } + // firstDevListRequest = false; + // deviceList = deviceList; + // parsed.deviceListJson = true; + // if (debug) console.log("✔ S", "deviceList parced"); + // onParced(); + // whenDeviceListWasUpdated(); + // connectToAllDevices(); + // } + //} //сборщик ssidJson сообщений - if (data.includes('ssids_":"')) { - if (IsJsonParse(data)) { - ssidJson = JSON.parse(data); - ssidJson = ssidJson; - if (debug) console.log("✔ S", "ssidJson parced"); - parcedFlags.ssidJson = true; - - onParced(); - } - } + //if (data.includes('ssids_":"')) { + // if (IsJsonParse(data)) { + // ssidJson = JSON.parse(data); + // ssidJson = ssidJson; + // if (debug) console.log("✔ S", "ssidJson parced"); + // parsed.ssidJson = true; + // + // onParced(); + // } + //} //сборщик errorsJson сообщений - if (data.includes('errors_":"')) { - if (IsJsonParse(data)) { - errorsJson = JSON.parse(data); - errorsJson = errorsJson; - parcedFlags.errorsJson = true; - if (debug) console.log("✔ S", "errorsJson parced"); - onParced(); - } - } + //if (data.includes('errors_":"')) { + // if (IsJsonParse(data)) { + // errorsJson = JSON.parse(data); + // errorsJson = errorsJson; + // parsed.errorsJson = true; + // if (debug) console.log("✔ S", "errorsJson parced"); + // onParced(); + // } + //} //сборщик settingsJson сообщений - if (data.includes('settings_":"')) { - if (IsJsonParse(data)) { - settingsJson = JSON.parse(data); - settingsJson = settingsJson; - //sortingLayout(); - parcedFlags.settingsJson = true; - if (debug) console.log("✔ S", "settingsJson parced"); - onParced(); - } - } + //if (data.includes('settings_":"')) { + // if (IsJsonParse(data)) { + // settingsJson = JSON.parse(data); + // settingsJson = settingsJson; + // //sortingLayout(); + // parsed.settingsJson = true; + // if (debug) console.log("✔ S", "settingsJson parced"); + // onParced(); + // } + //} //сборщик log сообщений if (data.includes("/log|")) { data = data.replace("/log|", ""); - //let msg = data.toString(); addCoreMsg(data); } //метки начала конца пакетов для Blob--------------------------------------------------------------------------// - configJsonPacket.handle(data); - itemsJsonPacket.handle(data); - widgetsJsonPacket.handle(data); - scenarioJsonPacket.handle(data); + //configJsonPacket.handle(data); + //itemsJsonPacket.handle(data); + //widgetsJsonPacket.handle(data); + //scenarioJsonPacket.handle(data); } //прием от всех устройств //сборщик paramsJson сообщений @@ -508,21 +514,7 @@ if (event.data instanceof Blob) { //принимаем данные только для выбранного устройства if (ws === selectedWs) { - if (configJsonPacket) configJsonPacket.append(event.data); - if (itemsJsonPacket) itemsJsonPacket.append(event.data); - if (widgetsJsonPacket) widgetsJsonPacket.append(event.data); - if (scenarioJsonPacket) scenarioJsonPacket.append(event.data); - - var bb = event.data; - handleBlob(bb); - - //bb = bb.slice(0, 10); - //let testBlobReader = new FileReader(); - //testBlobReader.readAsText(bb); - //testBlobReader.onload = () => { - // let testBlobResult = testBlobReader.result; - // console.log("[iiiiiiiiii]", testBlobResult); - //}; + parseBlob(event.data); } if (!chartJsonBlobArray[chartTopic]) chartJsonBlobArray[chartTopic] = new MyBlobBuilder(); @@ -545,60 +537,188 @@ } } - async function handleBlob(blob) { - let txt = await blob.text(); - console.log("txt: ", txt); - ////получаем заголовок - //var blobHeader = blob.slice(0, 6); - //let header = await blobHeader.text(); + async function parseBlob(blob) { + //получаем заголовок + var blobHeader = blob.slice(0, 6); + let header = await blobHeader.text(); //console.log("header: ", header); - ////получаем размер - //var blobSize = blob.slice(7, 11); - //let size = await blobSize.text(); + //получаем размер + var blobSize = blob.slice(7, 11); + let size = await blobSize.text(); //console.log("size: ", size); + + if (header === "itemsj") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + itemsJson = out.json; + parsed.itemsJson = true; + console.log("[✔]", "itemsJson: ", itemsJson); + } else { + parsed.itemsJson = false; + console.log("[e]", "itemsJson parse error"); + } + } + if (header === "widget") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + widgetsJson = out.json; + parsed.widgetsJson = true; + console.log("[✔]", "widgetsJson: ", widgetsJson); + } else { + parsed.widgetsJson = false; + console.log("[e]", "widgetsJson parse error"); + } + } + if (header === "config") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + configJson = out.json; + parsed.configJson = true; + console.log("[✔]", "configJson: ", configJson); + } else { + parsed.configJson = false; + console.log("[e]", "configJson parse error"); + } + } + if (header === "scenar") { + scenarioTxt = await getPayloadAsTxt(blob, size); + console.log("[i]", "scenarioTxt: ", scenarioTxt); + } + if (header === "settin") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + settingsJson = out.json; + parsed.settingsJson = true; + console.log("[✔]", "settingsJson: ", settingsJson); + } else { + parsed.settingsJson = false; + console.log("[e]", "settingsJson parse error"); + } + } + if (header === "ssidli") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + ssidJson = out.json; + parsed.ssidJson = true; + console.log("[✔]", "ssidJson: ", ssidJson); + } else { + parsed.ssidJson = false; + console.log("[e]", "ssidJson parse error"); + } + } + if (header === "errors") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + errorsJson = out.json; + parsed.errorsJson = true; + console.log("[✔]", "errorsJson: ", errorsJson); + } else { + parsed.errorsJson = false; + console.log("[e]", "errorsJson parse error"); + } + } + if (header === "devlis") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + incDeviceList = out.json; + parsed.incDeviceList = true; + console.log("[✔]", "incDeviceList: ", incDeviceList); + handleDeviseList(); + } else { + parsed.incDeviceList = false; + console.log("[e]", "incDeviceList parse error"); + } + } + + onParced(); + } + + async function getJsonAsJson(blob, size, out) { + let partBlob = blob.slice(12, size); + let txt = await partBlob.text(); + try { + out.json = JSON.parse(txt); + out.parse = true; + } catch (e) { + if (debug) console.log("[e]", "json parce error: ", txt); + out.parse = false; + } + return out.parse; + } + + async function getPayloadAsJson(blob, size, out) { + let partBlob = blob.slice(size, blob.length); + let txt = await partBlob.text(); + try { + out.json = JSON.parse(txt); + out.parse = true; + } catch (e) { + if (debug) console.log("[e]", "json parse error: ", txt); + out.parse = false; + } + return out.parse; + } + + async function getPayloadAsTxt(blob, size) { + let payloadBlob = blob.slice(size, blob.length); + let payload = await payloadBlob.text(); + return payload; } async function onParced() { - if (currentPageName === "/|") { - clearParcedFlags(); - if (debug) console.log("✔", "dashboard data received"); - pageReady.dash = true; - } - if (currentPageName === "/config|" && itemsJsonPacket.isParced && widgetsJsonPacket.isParced && configJsonPacket.isParced && scenarioJsonPacket.isParced && parcedFlags.settingsJson) { - clearParcedFlags(); - - itemsJson = itemsJsonPacket.getData; - widgetsJson = widgetsJsonPacket.getData; - configJson = configJsonPacket.getData; - scenarioTxt = scenarioJsonPacket.getData; + //if (currentPageName === "/|") { + // clearParcedFlags(); + // if (debug) console.log("✔", "dashboard data received"); + // pageReady.dash = true; + //} + if (currentPageName === "/config|" && parsed.itemsJson && parsed.widgetsJson && parsed.configJson && parsed.settingsJson) { + clearParcedFlags(); pageReady.config = true; - if (debug) console.log("✔✔", "config page parced"); } - if (currentPageName === "/connection|" && parcedFlags.ssidJson && parcedFlags.settingsJson && parcedFlags.errorsJson) { + if (currentPageName === "/connection|" && parsed.ssidJson && parsed.settingsJson && parsed.errorsJson) { clearParcedFlags(); if (debug) console.log("✔✔", "connection page parced"); pageReady.connection = true; } - if (currentPageName === "/list|" && parcedFlags.deviceListJson) { + + if (currentPageName === "/list|" && parsed.deviceListJson) { clearParcedFlags(); if (debug) console.log("✔✔", "list page parced"); pageReady.list = true; } - if (currentPageName === "/system|" && parcedFlags.errorsJson && parcedFlags.settingsJson) { + + if (currentPageName === "/system|" && parsed.errorsJson && parsed.settingsJson) { clearParcedFlags(); getVersionsList(); if (debug) console.log("✔✔", "system page parced"); pageReady.system = true; } - if (currentPageName === "/dev|" && parcedFlags.errorsJson && parcedFlags.settingsJson && configJsonPacket.isParced && itemsJsonPacket.isParced) { - clearParcedFlags(); - configJson = configJsonPacket.getData; - itemsJson = itemsJsonPacket.getData; - if (debug) console.log("✔✔", "dev page parced"); - pageReady.dev = true; + + // if (currentPageName === "/dev|" && parsed.errorsJson && parsed.settingsJson && configJsonPacket.isParced && itemsJsonPacket.isParced) { + // clearParcedFlags(); + // configJson = configJsonPacket.getData; + // itemsJson = itemsJsonPacket.getData; + // if (debug) console.log("✔✔", "dev page parced"); + // pageReady.dev = true; + // } + } + + function handleDeviseList() { + if (firstDevListRequest) { + deviceList = incDeviceList; + deviceList[0].status = true; + } else { + deviceList = combineArrays(deviceList, incDeviceList); } + firstDevListRequest = false; + deviceList = deviceList; + parsed.deviceListJson = true; + if (debug) console.log("[✔]", "deviceList parced"); + onParced(); + whenDeviceListWasUpdated(); + connectToAllDevices(); } //***********************************************************dashboard***************************************************************/ @@ -888,8 +1008,8 @@ console.log("[i]", "parced flags cleared"); - for (const [key, value] of Object.entries(parcedFlags)) { - parcedFlags[key] = false; + for (const [key, value] of Object.entries(parsed)) { + parsed[key] = false; } clearFlags(); } @@ -1254,8 +1374,8 @@ } function test() { - wsSendMsg(selectedWs, "/test|"); - console.log("[i]", "test"); + //wsSendMsg(selectedWs, "/test|"); + //console.log("[i]", "test"); }