управление ошибками

This commit is contained in:
Dmitry Borisenko
2022-02-09 16:44:44 +01:00
parent 01428f4531
commit c728d34f03
8 changed files with 62 additions and 37 deletions

View File

@@ -13,6 +13,10 @@ void standWebServerInit() {
HTTP.send(200, "application/json", settingsFlashJson);
});
HTTP.on("/errors.json", HTTP_GET, []() {
HTTP.send(200, "application/json", errorsHeapJson);
});
HTTP.on("/paramsh.json", HTTP_GET, []() {
HTTP.send(200, "application/json", paramsHeapJson);
});

View File

@@ -30,69 +30,80 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
} break;
case WStype_TEXT: {
//максимальное количество символов заголовка
size_t headerLenth = 7;
bool endOfHeaderFound = false;
size_t maxAllowedHeaderSize = 15; //максимальное количество символов заголовка
size_t headerLenth = 0;
String headerStr;
headerStr.reserve(headerLenth + 1);
for (size_t i = 0; i < headerLenth; i++) {
headerStr += (char)payload[i];
for (size_t i = 0; i <= maxAllowedHeaderSize; i++) {
headerLenth++;
char s = (char)payload[i];
headerStr += s;
if (s == '|') {
endOfHeaderFound = true;
break;
}
}
//отправка данных которые нужны для всех страниц веб интерфейса
//эти данные мы отправляем в двух случаях:
// 1 пользователь перешел на новую страницу
// 2 каждые 30 секунд
if (!endOfHeaderFound) {
SerialPrint("E", "WS " + String(num), "Package without header");
}
// all pages===================================================================
//**отправка**//
if (headerStr == ("/all")) {
if (headerStr == ("/all|")) {
standWebSocket.sendTXT(num, ssidListHeapJson);
standWebSocket.broadcastTXT(errorsHeapJson);
standWebSocket.sendTXT(num, errorsHeapJson);
}
// dashboard===================================================================
//**отправка**//
if (headerStr == "/") {
if (headerStr == "/|") {
sendFileToWs("/layout.json", num, 1024);
standWebSocket.sendTXT(num, paramsHeapJson);
}
//**сохранение**//
if (headerStr == "/tuoyal") {
if (headerStr == "/tuoyal|") {
writeFileUint8tByFrames("layout.json", payload, length, headerLenth, 256);
}
// configutation===============================================================
//**отправка**//
if (headerStr == "/config") {
if (headerStr == "/config|") {
sendFileToWs("/items.json", num, 1024);
sendFileToWs("/widgets.json", num, 1024);
sendFileToWs("/config.json", num, 1024);
sendFileToWs("/settings.json", num, 1024);
}
//**сохранение**//
if (headerStr == "/gifnoc") {
if (headerStr == "/gifnoc|") {
writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256);
}
// connection===================================================================
//**отправка**//
if (headerStr == "/connec") {
if (headerStr == "/connection|") {
sendFileToWs("/settings.json", num, 1024);
//запуск асинхронного сканирования wifi сетей при переходе на страницу соединений
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
}
//**отправка**//
if (headerStr == "/scan") {
//запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
}
//**сохранение**//
if (headerStr == "/cennoc") {
if (headerStr == "/sgnittes|") {
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
settingsFlashJson = readFile(F("settings.json"), 4096);
}
//**отправка**//
if (headerStr == "/scan|") {
//запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
}
// list ===================================================================
//**отправка**//
if (headerStr == "/list") {
if (headerStr == "/list|") {
standWebSocket.sendTXT(num, devListHeapJson);
}
// system ===================================================================
//**сохранение**//
if (headerStr == "/rorre|") {
writeUint8tToString(payload, length, headerLenth, errorsHeapJson);
}
// orders ===================================================================
if (headerStr == "/reboot") {
if (headerStr == "/reboot|") {
ESP.restart();
}

View File

@@ -1,13 +1,5 @@
#include "Utils/FileUtils.h"
void writeStrValueToJsonFile(const String& filename, String key, String value) {
String tmp = readFile(filename, 4096);
if (!jsonWriteStr_(tmp, key, value)) {
Serial.println(F("failed write json value to file"));
}
writeFile(filename, tmp);
}
//данная функция записывает файл из буфера страницами указанного размера
void writeFileUint8tByFrames(const String& filename, uint8_t*& big_buf, size_t length, size_t headerLenth, size_t frameSize) {
String path = filepath(filename);
@@ -31,6 +23,14 @@ void writeFileUint8tByFrames(const String& filename, uint8_t*& big_buf, size_t l
file.close();
}
// void writeStrValueToJsonFile(const String& filename, String key, String value) {
// String tmp = readFile(filename, 4096);
// if (!jsonWriteStr_(tmp, key, value)) {
// Serial.println(F("failed write json value to file"));
// }
// writeFile(filename, tmp);
// }
//данная функция читает из файла страницами указанного размера
// void readFileUint8tByFrames(const String& filename, size_t frameSize) {
// String path = filepath(filename);

View File

@@ -1,5 +1,13 @@
#include "Utils/StringUtils.h"
void writeUint8tToString(uint8_t* payload, size_t length, size_t headerLenth, String& payloadStr) {
payloadStr = "";
payloadStr.reserve(length + 1);
for (size_t i = headerLenth; i < length; i++) {
payloadStr += (char)payload[i];
}
}
String selectToMarkerLast(String str, String found) {
int p = str.lastIndexOf(found);
return str.substring(p + found.length());