From db2f9c3298681316c917824be2713f26bd6f0216 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Sun, 9 Oct 2022 21:29:56 +0200 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20=D0=B3?= =?UTF-8?q?=D1=80=D0=B0=D1=84=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.svelte | 252 ++++++++++++++++++++----------------------------- 1 file changed, 102 insertions(+), 150 deletions(-) diff --git a/src/App.svelte b/src/App.svelte index c1b7fb0..e744210 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -91,9 +91,8 @@ status: false, }, ]; - let incDeviceList = []; - ////////////////////////////////// + let incDeviceList = []; let layoutJson = []; let paramsJson = {}; @@ -127,36 +126,13 @@ let parcedEvent = 0; - //***********************************************************blob**************************************************************/ - var MyBlobBuilder = function () { - this.parts = []; - }; - - MyBlobBuilder.prototype.append = function (part) { - this.parts.push(part); - this.blob = undefined; // Invalidate the blob - }; - - MyBlobBuilder.prototype.getBlob = function () { - if (!this.blob) { - this.blob = new Blob(this.parts, { - type: "binary", - }); - } - return this.blob; - }; - - MyBlobBuilder.prototype.clear = function () { - this.parts = []; - }; - //***********************************************************navigation********************************************************/ let currentPageName = undefined; - var chartJsonBlobArray = []; - let chartTopic = ""; - var chartJsonBlob = new MyBlobBuilder(); - var layoutJsonBlobArray = []; + //var chartJsonBlobArray = []; + //let chartTopic = ""; + //var chartJsonBlob = new MyBlobBuilder(); + //var layoutJsonBlobArray = []; router.subscribe(handleNavigation); @@ -287,109 +263,18 @@ //события веб сокетов socket[ws].addEventListener("message", function (event) { - //сообщения типа String-----------------------------------------------------------------------------------// if (typeof event.data === "string") { let data = event.data; - if (ws === selectedWs) { - //сборщик log сообщений - //if (data.includes("/log|")) { - // data = data.replace("/log|", ""); - // addCoreMsg(data); - //} - } - //прием от всех устройств - //сборщик paramsJson сообщений - if (data.includes('"params_":"')) { - if (IsJsonParse(data)) { - console.log("[4.1]", ws, "dev params", data); - //как добавить в объект json новый объект - paramsJson = { - ...paramsJson, - ...JSON.parse(data), - }; - paramsJson = paramsJson; - console.log("[4.2]", ws, "global params", paramsJson); - updateAllStatuses(ws); - onParced(); - } - } - //сборщик layoutJson пакетов - if (data === "/st/layout.json") { - layoutJsonFlag[ws] = true; - console.log("[1]", ws, "layout package start", layoutJsonFlag); - } - if (data === "/end/layout.json") { - layoutJsonFlag[ws] = false; - console.log("[1]", ws, "layout package received", layoutJsonFlag); - //как только прилетел весь блоб мы начнем его читать ридером и заодно запросим json-ы всех параметров - combineLayoutsInOne(ws); - } - //сборщик chartJson пакетов - if (data.includes("/st/chart.json|")) { - let json = JSON.parse(deleteBeforeDelimiter(data, "|")); - chartTopic = ws.toString() + json.topic.toString(); - chartJsonFlag[chartTopic] = true; - console.log("[i]", ws, "chart package start", JSON.stringify(chartJsonFlag)); - } - if (data.includes("/end/chart.json|")) { - let json = JSON.parse(deleteBeforeDelimiter(data, "|")); - chartTopic = ws.toString() + json.topic.toString(); - chartJsonFlag[chartTopic] = false; - - console.log("[i]", ws, "chart package received", JSON.stringify(chartJsonFlag)); - - var bb = chartJsonBlobArray[chartTopic].getBlob(); - let chartJsonReader = new FileReader(); - chartJsonReader.readAsText(bb); - chartJsonReader.onload = () => { - let chartJsonResult = chartJsonReader.result; - chartJsonResult = "[" + chartJsonResult.substring(0, chartJsonResult.length - 1) + "]"; - if (IsJsonParse(chartJsonResult)) { - let arr = JSON.parse(chartJsonResult); - let status = {}; - status.status = arr; - status.topic = json.topic; - status.maxCount = json.maxCount; - apdateWidgetByArray(status); - if (debug) console.log("✔ B", "chartJson parced", status); - } - }; - chartJsonBlob.clear(); - } - if (data.includes("/string/chart.json|")) { - let tmp = deleteBeforeDelimiter(data, "|"); - if (IsJsonParse(tmp)) { - let json = JSON.parse(tmp); - console.log("✔ S", "chartJson parced"); - apdateWidgetByArray(json); - } - } - //сборщик statusJson сообщений - if (data.includes('"status"') && !data.includes("/string/chart.json|")) { - if (IsJsonParse(data)) { - let statusJson = JSON.parse(data); - if (Array.isArray(statusJson.status)) { - //updateWidgetArr(statusJson); - //if (debug) console.log("[i] status (arr)", ws); - } else { - updateWidget(statusJson); - if (debug) console.log("[i] status (dgt)", ws, JSON.stringify(statusJson)); - } - } - } } - //сообщения типа Blob-------------------------------------------------------------------------------------// if (event.data instanceof Blob) { //принимаем данные только для выбранного устройства if (ws === selectedWs) { parseBlob(event.data); } - - if (!chartJsonBlobArray[chartTopic]) chartJsonBlobArray[chartTopic] = new MyBlobBuilder(); - if (chartJsonFlag[chartTopic]) chartJsonBlobArray[chartTopic].append(event.data); - - if (!layoutJsonBlobArray[ws]) layoutJsonBlobArray[ws] = new MyBlobBuilder(); - if (layoutJsonFlag[ws]) layoutJsonBlobArray[ws].append(event.data); + //собираем данные со всех устройств только в случае если пользователь на dashboard + if (currentPageName === "/|") { + parseAllBlob(event.data, ws); + } } }); socket[ws].addEventListener("close", (event) => { @@ -505,6 +390,85 @@ onParced(); } + async function parseAllBlob(blob, ws) { + //получаем заголовок + 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(); + //console.log("size: ", size); + + if (header === "status") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + let statusJson = out.json; + updateWidget(statusJson); + //if (blobDebug) + console.log("[✔]", "statusJson: ", statusJson); + } else { + if (blobDebug) console.log("[e]", "statusJson parse error"); + } + } + if (header === "layout") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + let devLayout = out.json; + combineLayoutsInOne(ws, devLayout); + if (blobDebug) console.log("[✔]", "devLayout: ", devLayout); + } else { + if (blobDebug) console.log("[e]", "devLayout parse error"); + } + } + if (header === "params") { + let out = {}; + if (await getPayloadAsJson(blob, size, out)) { + let devParams = out.json; + paramsJson = { + ...paramsJson, + ...devParams, + }; + paramsJson = paramsJson; + updateAllStatuses(ws); + onParced(); + if (blobDebug) console.log("[✔]", "devParams: ", devParams); + } else { + if (blobDebug) console.log("[e]", "devParams parse error"); + } + } + if (header === "charta") { + let txt = await getPayloadAsTxt(blob, size); + txt = "[" + txt.substring(0, txt.length - 1) + "]"; + let chartJson; + try { + chartJson = JSON.parse(txt); + if (blobDebug) console.log("[i]", "chart data json: ", chartJson); + } catch (e) { + if (blobDebug) console.log("[e]", "chart json parce error, return"); + return; + } + let out = {}; + let addJson = {}; + if (await getJsonAsJson(blob, size, out)) { + addJson = out.json; + if (blobDebug) console.log("[i]", "chart add json: ", addJson); + } else { + if (blobDebug) console.log("[e]", "chart json parce error, return"); + return; + } + let finalDataJson = {}; + finalDataJson.status = chartJson; + + finalDataJson = { + ...finalDataJson, + ...addJson, + }; + console.log("[✔]", "chartJson: ", finalDataJson); + apdateWidgetByArray(finalDataJson); + } + } + async function getJsonAsJson(blob, size, out) { let partBlob = blob.slice(12, size); let txt = await partBlob.text(); @@ -538,11 +502,11 @@ } async function onParced() { - //if (currentPageName === "/|") { - // clearParcedFlags(); - // if (debug) console.log("✔", "dashboard data received"); - // pageReady.dash = true; - //} + 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(); @@ -596,24 +560,13 @@ //***********************************************************dashboard***************************************************************/ //слияние layout-ов всех устройств в общий layout - async function combineLayoutsInOne(ws) { - var bb = layoutJsonBlobArray[ws].getBlob(); - let reader = new FileReader(); - reader.readAsText(bb); - - reader.onload = () => { - if (IsJsonParse(reader.result)) { - let devLayout = JSON.parse(reader.result); - for (let i = 0; i < devLayout.length; i++) { - devLayout[i].ws = ws; - } - layoutJson = layoutJson.concat(devLayout); - console.log("[2]", ws, "blob package pushed to layout"); - sortingLayout(ws); - } else { - console.log("[E]", "ERROR OF LAYOUT!!!"); - } - }; + async function combineLayoutsInOne(ws, devLayout) { + for (let i = 0; i < devLayout.length; i++) { + devLayout[i].ws = ws; + } + layoutJson = layoutJson.concat(devLayout); + console.log("[2]", ws, "devLayout pushed to layout"); + sortingLayout(ws); } function sortingLayout(ws) { @@ -654,7 +607,6 @@ layoutJson = layoutJson; console.log("[3]", ws, "layout sort, requested params..."); wsSendMsg(ws, "/params|"); - //onParced(); //удалить } function updateAllStatuses(ws) { @@ -855,8 +807,8 @@ widgetsJson = []; itemsJson = []; layoutJson = []; - layoutJsonBlobArray = []; - chartJsonBlobArray = []; + //layoutJsonBlobArray = []; + //chartJsonBlobArray = []; scenarioTxt = "";