diff --git a/include/ESPConfiguration.h b/include/ESPConfiguration.h index d8eab7f5..1e185219 100644 --- a/include/ESPConfiguration.h +++ b/include/ESPConfiguration.h @@ -2,7 +2,7 @@ #include "Global.h" #include "classes/IoTItem.h" -extern std::vector IoTItems; // вектор ссылок базового класса IoTItem - список всех запущенных сенсоров +extern std::list IoTItems; // вектор ссылок базового класса IoTItem - список всех запущенных сенсоров extern void configure(String path); void clearConfigure(); diff --git a/include/Global.h b/include/Global.h index b919cdec..c1bf7a9d 100644 --- a/include/Global.h +++ b/include/Global.h @@ -8,6 +8,7 @@ #include #include #include +#include #ifdef ESP32 #include "WiFi.h" diff --git a/src/ESPConfiguration.cpp b/src/ESPConfiguration.cpp index 16279a8b..de80d564 100644 --- a/src/ESPConfiguration.cpp +++ b/src/ESPConfiguration.cpp @@ -3,7 +3,7 @@ extern IoTGpio IoTgpio; -std::vector IoTItems; +std::list IoTItems; void* getAPI(String subtype, String params); void configure(String path) { @@ -38,8 +38,8 @@ void configure(String path) { void clearConfigure() { Serial.printf("Start clearing config\n"); - for (unsigned int i = 0; i < IoTItems.size(); i++) { - if (IoTItems[i]) delete IoTItems[i]; + for (std::list::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) { + if (*it) delete *it; } IoTItems.clear(); } \ No newline at end of file diff --git a/src/Main.cpp b/src/Main.cpp index 2292bd61..92cba7c8 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -94,8 +94,10 @@ void loop() { //обновление mqtt mqttLoop(); - for (unsigned int i = 0; i < IoTItems.size(); i++) { - IoTItems[i]->loop(); + // передаем управление каждому элементу конфигурации для выполнения своих функций + for (std::list::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) { + (*it)->loop(); + //if ((*it)->iAmDead) delete *it; } handleOrder(); diff --git a/src/classes/IoTItem.cpp b/src/classes/IoTItem.cpp index 017978f9..21cae993 100644 --- a/src/classes/IoTItem.cpp +++ b/src/classes/IoTItem.cpp @@ -86,8 +86,8 @@ void IoTItem::doByInterval() {} IoTValue IoTItem::execute(String command, std::vector& param) { return {}; } IoTItem* findIoTItem(String name) { // поиск элемента модуля в существующей конфигурации - for (unsigned int i = 0; i < IoTItems.size(); i++) { - if (IoTItems[i]->getID() == name) return IoTItems[i]; + for (std::list::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) { + if ((*it)->getID() == name) return *it; } return nullptr;