diff --git a/components/spit/include/SPITObject.h b/components/spit/include/SPITObject.h index 12e1e65..e3dd229 100644 --- a/components/spit/include/SPITObject.h +++ b/components/spit/include/SPITObject.h @@ -16,47 +16,17 @@ #include "SPITType.h" #include "SPIT_Message.h" -#include -#include -#include +#include "SpitRepo.hpp" using namespace std; class SPITObjectListener; class SPITObject { - private: - static unordered_map> sSpitObjects; - static unordered_map> sSpitObjectsRemote; - public: - static SPITObject *getSPITObject(const string &id); - static const SPITObject &getSPITObjectRef(const string &id); - static void addSPITObject(unique_ptr spitObject); - static bool removeSPITObject(const SPITObject &spitObject); - static bool removeSPITObject(const string & spitObjectID); - static int getSPITObjectCount() { - return sSpitObjects.size(); - } - static SPITObject *getSPITObject(int p_Index); - static const SPITObject &getSPITObjectRef(int p_Index); - static void clearSPITObjects() { sSpitObjects.clear(); } - static void clearUnconfirmedSPITObjects(); - static void setConfirmedFalse(); - - static SPITObject *getSPITObjectRemote(const string &id); - static const SPITObject &getSPITObjectRemoteRef(const string &id); - static void addSPITObjectRemote(unique_ptr spitObject); - static bool removeSPITObjectRemote(const SPITObject &spitObject); - static bool removeSPITObjectRemote(const string & spitObjectID); - static int getSPITObjectRemoteCount() { - return sSpitObjectsRemote.size(); - } - static SPITObject *getSPITObjectRemote(int p_Index); - static const SPITObject &getSPITObjectRemoteRef(int p_Index); - static void clearSPITObjectsRemote(){ sSpitObjectsRemote.clear(); } - - static void eventProjectClosed(); + static void clearUnconfirmedSPITObjects(SpitRepo &repo); + static void setConfirmedFalse(SpitRepo &repo); + static void eventProjectClosed(SpitRepo &repo, SpitRepo &remoteRepo); SPITObject(string p_ID); @@ -133,15 +103,15 @@ class SPITObject { long long getDelay() const { return m_Delay; } long long getDuration() const { return m_Duration; } - bool getProjectIndepended() const { + bool getProjectIndepended(SpitRepo &repo, SpitRepo &remoteRepo) const { SPITType *ptrSPITType; if (m_ServerRemote == false) { - ptrSPITType = SPITType::getSPITType(m_SPITTypeID); + ptrSPITType = repo.getEntry(m_SPITTypeID); if (ptrSPITType == nullptr) return true; return ptrSPITType->getProjectIndepended(); } else { - ptrSPITType = SPITType::getSPITTypeRemote(m_SPITTypeID); + ptrSPITType = remoteRepo.getEntry(m_SPITTypeID); if (ptrSPITType == nullptr) return true; return ptrSPITType->getProjectIndepended(); diff --git a/components/spit/include/SPITType.h b/components/spit/include/SPITType.h index 191e23e..8d2a9dd 100644 --- a/components/spit/include/SPITType.h +++ b/components/spit/include/SPITType.h @@ -16,40 +16,16 @@ #include "SPITSocket.h" #include "SPIT_Message.h" -#include -#include -#include +#include "SpitRepo.hpp" using namespace std; class SPITTypeListener; class SPITType { - private: - static unordered_map> sSpitTypes; - static unordered_map> sSpitTypesRemote; - public: - static SPITType *getSPITType(const string &id); - static const SPITType &getSPITTypeRef(const string &id); - static void addSPITType( unique_ptr spitType); - static bool removeSPITType(const SPITType &spitType); - static int getSPITTypeCount() { return sSpitTypes.size(); } - static SPITType *getSPITType(int p_Index); - static const SPITType &getSPITTypeRef(int p_Index); - static void clearSPITTypes() { sSpitTypes.clear(); } - static void setConfirmedFalse(); - - static SPITType *getSPITTypeRemote(const string &id); - static const SPITType &getSPITTypeRemoteRef(const string &id); - static void addSPITTypeRemote(unique_ptr spitType); - static bool removeSPITTypeRemote(const SPITType &spitType); - static int getSPITTypeRemoteCount() { return sSpitTypesRemote.size(); } - static SPITType *getSPITTypeRemote(int p_Index); - static const SPITType &getSPITTypeRemoteRef(int p_Index); - static void clearSPITTypesRemote() { sSpitTypesRemote.clear(); } - - static void eventProjectClosed(); + static void setConfirmedFalse(SpitRepo &repo); + static void eventProjectClosed(SpitRepo &repo, SpitRepo &remoteRepo); SPITType(string p_ID); SPITType(string p_ID, string p_GroupName, string p_Name, bool p_Fixed, bool p_ProjectIndepended, long long p_DefaultDelay, long long p_DefaultDuration); diff --git a/components/spit/include/SPIT_Client.h b/components/spit/include/SPIT_Client.h index dfc1978..8618bb7 100644 --- a/components/spit/include/SPIT_Client.h +++ b/components/spit/include/SPIT_Client.h @@ -20,6 +20,7 @@ #include "SPITSocket.h" #include "SPITType.h" #include "SPIT_Message.h" +#include "SpitRepo.hpp" #include #include @@ -345,6 +346,12 @@ class SPIT_Client : I_SAD_Client { void answerWatchdog() { sAnswered = true; } + + SpitRepo mSpitObjects; + SpitRepo mRemoteSpitObjects; + SpitRepo mSpitTypes; + SpitRepo mRemoteSpitTypes; + }; #endif /* SPIT_CLIENT_H */ diff --git a/components/spit/include/SpitRepo.hpp b/components/spit/include/SpitRepo.hpp new file mode 100644 index 0000000..55c6261 --- /dev/null +++ b/components/spit/include/SpitRepo.hpp @@ -0,0 +1,64 @@ +#pragma once +#include +#include +#include + +template +class SpitRepo { + public: + T *getEntry(const string &id) { + auto i = mEntries.find(id); + if (i == mEntries.end()) { + return nullptr; + } + return i->second.get(); + } + + const T &getEntryRef(const string &id) { + return *mEntries.at(id); + } + + T *getEntry(int index) { + if (index >= 0 && index < mEntries.size()) { + return next(mEntries.begin(), index)->second.get(); + } + return nullptr; + } + const T &getEntryRef(int index) { + if (index >= 0 && index < mEntries.size()) { + auto i = next(mEntries.begin(), index); + return *i->second; + } else { + throw "SPITObject index out of range"; + } + } + + void addEntry(unique_ptr entry) { + mEntries[entry->getID()] = move(entry); + } + bool removeEntry(const T &entry) { + return removeEntry(entry.getID()); + } + bool removeEntry(const string &id) { + auto i = mEntries.find(id); + if (i == mEntries.end()) { + return false; + } + i = mEntries.erase(i); + return true; + } + int getEntryCount() { + return mEntries.size(); + } + + unordered_map> &getRepo() { + return mEntries; + } + + void clearEntries() { + mEntries.clear(); + } + + private: + unordered_map> mEntries; +}; diff --git a/components/spit/src/SPITObject.cpp b/components/spit/src/SPITObject.cpp index 6c4426f..e4a56bb 100644 --- a/components/spit/src/SPITObject.cpp +++ b/components/spit/src/SPITObject.cpp @@ -16,147 +16,39 @@ #include "SPITSocket.h" #include "esp_log.h" -unordered_map> SPITObject::sSpitObjects; -unordered_map> SPITObject::sSpitObjectsRemote; - -SPITObject *SPITObject::getSPITObject(const string &id) { - auto i = sSpitObjects.find(id); - if (i == sSpitObjects.end()) { - return nullptr; - } - return i->second.get(); -} -/** - * Returns the reference of the SPITObject with ID == id. - * Throws an exception if no SPITObject is not found. - * @param id the ID - * @return reference of the SPITType with ID == id - */ -const SPITObject &SPITObject::getSPITObjectRef(const string &id) { - return *sSpitObjects.at(id); -} - -SPITObject *SPITObject::getSPITObjectRemote(const string &id) { - auto i = sSpitObjectsRemote.find(id); - if (i == sSpitObjectsRemote.end()) { - return nullptr; - } - return i->second.get(); -} -/** - * Returns the reference of the remote SPITObject with ID == id. - * Throws an exception if no SPITObject is not found. - * @param id the ID - * @return reference of the SPITType with ID == id - */ -const SPITObject &SPITObject::getSPITObjectRemoteRef(const string &id) { - return *sSpitObjectsRemote.at(id); -} - -void SPITObject::addSPITObject(unique_ptr spitObject) { - ESP_LOGD("OBJ", "adding spitObject %s/%s", spitObject->getID().c_str(), spitObject->getName().c_str()); - sSpitObjects[spitObject->getID()] = move(spitObject); -} -void SPITObject::addSPITObjectRemote(unique_ptr spitObject) { - ESP_LOGD("OBJ", "adding spitObject %s/%s", spitObject->getID().c_str(), spitObject->getName().c_str()); - sSpitObjectsRemote[spitObject->getID()] = move(spitObject); -} -bool SPITObject::removeSPITObject(const SPITObject &spitObject) { - return removeSPITObject(spitObject.getID()); -} -bool SPITObject::removeSPITObject(const string &spitObjectID) { - auto i = sSpitObjects.find(spitObjectID); - if (i == sSpitObjects.end()) { - return false; - } - i = sSpitObjects.erase(i); - return true; -} -bool SPITObject::removeSPITObjectRemote(const SPITObject &spitObject) { - return removeSPITObjectRemote(spitObject.getID()); -} -bool SPITObject::removeSPITObjectRemote(const string &spitObjectID) { - auto i = sSpitObjectsRemote.find(spitObjectID); - if (i == sSpitObjectsRemote.end()) { - return false; - } - i = sSpitObjectsRemote.erase(i); - return true; -} - -SPITObject *SPITObject::getSPITObject(int p_Index) { - if (p_Index >= 0 && p_Index < sSpitObjects.size()) { - auto i = next(sSpitObjects.begin(), p_Index); - return i->second.get(); - } - return nullptr; -} -/** - * Returns a reference to the SPITObject at position p_Index. - * Throws an exception if p_Index is out of range. - * @param p_Index position - * @return the reference of the SPITObject at position. - */ -const SPITObject &SPITObject::getSPITObjectRef(int p_Index) { - if (p_Index >= 0 && p_Index < sSpitObjects.size()) { - auto i = next(sSpitObjects.begin(), p_Index); - return *i->second; - } else { - throw "SPITObject index out of range"; - } -} -SPITObject *SPITObject::getSPITObjectRemote(int p_Index) { - if (p_Index >= 0 && p_Index < sSpitObjectsRemote.size()) { - auto i = next(sSpitObjectsRemote.begin(), p_Index); - return i->second.get(); - } else { - return nullptr; - } -} -/** - * Returns a reference to the remote SPITObject at position p_Index. - * Throws an exception if p_Index is out of range. - * @param p_Index position - * @return the reference of the SPITObject at position. - */ -const SPITObject &SPITObject::getSPITObjectRemoteRef(int p_Index) { - if (p_Index >= 0 && p_Index < sSpitObjectsRemote.size()) { - auto i = next(sSpitObjectsRemote.begin(), p_Index); - return *i->second; - } else { - throw "Remote SPITObject index out of range"; - } -} /** * clears all unconfirmed SPITObjects not created by this SPIT_Client. */ -void SPITObject::clearUnconfirmedSPITObjects() { - for (auto i = sSpitObjects.begin(); i != sSpitObjects.end(); i++) { +void SPITObject::clearUnconfirmedSPITObjects(SpitRepo& repo) { + auto& entries = repo.getRepo(); + for (auto i = entries.begin(); i != entries.end(); i++) { SPITObject *ptrSPITObject = i->second.get(); if (ptrSPITObject->getCreatedByClient() == false && ptrSPITObject->getConfirmed() == false) { - i = sSpitObjects.erase(i); + i = entries.erase(i); } } } -void SPITObject::eventProjectClosed() { - for (auto i = sSpitObjects.begin(); i != sSpitObjects.end(); i++) { +void SPITObject::eventProjectClosed(SpitRepo& repo, SpitRepo& remoteRepo) { + auto& entries = repo.getRepo(); + for (auto i = entries.begin(); i != entries.end(); i++) { SPITObject *ptrSPITObject = i->second.get(); if (ptrSPITObject->getCreatedByClient() == true) { continue; } - i = sSpitObjects.erase(i); + i = entries.erase(i); } // Remote - sSpitObjectsRemote.clear(); + remoteRepo.clearEntries(); } /** * sets confirmed = false for all SPITObjects. * This should be called when the client has loaded a project. */ -void SPITObject::setConfirmedFalse() { - for (auto i = sSpitObjects.begin(); i != sSpitObjects.end(); i++) { +void SPITObject::setConfirmedFalse(SpitRepo& repo) { + auto& entries = repo.getRepo(); + for (auto i = entries.begin(); i != entries.end(); i++) { i->second->setConfirmed(false); } } diff --git a/components/spit/src/SPITType.cpp b/components/spit/src/SPITType.cpp index 68d9879..b9c071d 100644 --- a/components/spit/src/SPITType.cpp +++ b/components/spit/src/SPITType.cpp @@ -17,130 +17,26 @@ static const char *TAG = "SPIT"; -unordered_map> SPITType::sSpitTypes; -unordered_map> SPITType::sSpitTypesRemote; - -SPITType *SPITType::getSPITType(const string &id) { - auto i = sSpitTypes.find(id); - if (i == sSpitTypes.end()) { - return nullptr; - } - return i->second.get(); -} -/** - * Returns the reference of the SPITType with ID == id. - * Throws an exception if no SPITType is not found. - * @param id the ID - * @return reference of the SPITType with ID == id - */ -const SPITType &SPITType::getSPITTypeRef(const string &id) { - return *sSpitTypes.at(id); -} - -SPITType *SPITType::getSPITTypeRemote(const string &id) { - auto i = sSpitTypesRemote.find(id); - if (i == sSpitTypesRemote.end()) { - return nullptr; - } - return i->second.get(); -} - -/** - * Returns the reference of the remote SPITType with ID == id. - * Throws an exception if no SPITType is not found. - * @param id the ID - * @return reference of the SPITType with ID == id - */ -const SPITType &SPITType::getSPITTypeRemoteRef(const string &id) { - return *sSpitTypesRemote.at(id); -} - -void SPITType::addSPITType(unique_ptr spitType) { - ESP_LOGD("OBJ", "adding spitObject %s/%s", spitType->getID().c_str(), spitType->getName().c_str()); - sSpitTypes[spitType->getID()] = move(spitType); -} -void SPITType::addSPITTypeRemote(unique_ptr spitType) { - ESP_LOGD("OBJ", "adding spitObject %s/%s", spitType->getID().c_str(), spitType->getName().c_str()); - sSpitTypesRemote[spitType->getID()] = move(spitType); -} -bool SPITType::removeSPITType(const SPITType &spitType) { - auto i = sSpitTypes.find(spitType.getID()); - if (i == sSpitTypes.end()) { - return false; - } - i = sSpitTypes.erase(i); - return true; -} -bool SPITType::removeSPITTypeRemote(const SPITType &spitType) { - auto i = sSpitTypesRemote.find(spitType.getID()); - if (i == sSpitTypesRemote.end()) { - return false; - } - i = sSpitTypesRemote.erase(i); - return true; -} - -SPITType *SPITType::getSPITType(int p_Index) { - if (p_Index < sSpitTypes.size()) { - auto i = next(sSpitTypes.begin(), p_Index); - return i->second.get(); - } - return nullptr; -} -/** - * Returns a reference to the SPITType at position p_Index. - * Throws an exception if p_Index is out of range. - * @param p_Index position - * @return the reference of the SPITType at position. - */ -const SPITType &SPITType::getSPITTypeRef(int p_Index) { - if (p_Index >= 0 && p_Index < sSpitTypes.size()) { - auto i = next(sSpitTypes.begin(), p_Index); - return *i->second; - } else { - throw "SPITType index out of range"; - } -} -SPITType *SPITType::getSPITTypeRemote(int p_Index) { - if (p_Index < sSpitTypesRemote.size()) { - auto i = next(sSpitTypesRemote.begin(), p_Index); - return i->second.get(); - } - return nullptr; -} -/** - * Returns a reference to the remote SPITType at position p_Index. - * Throws an exception if p_Index is out of range. - * @param p_Index position - * @return the reference of the SPITType at position. - */ -const SPITType &SPITType::getSPITTypeRemoteRef(int p_Index) { - if (p_Index >= 0 && p_Index < sSpitTypesRemote.size()) { - auto i = next(sSpitTypesRemote.begin(), p_Index); - return *i->second; - } else { - throw "Remote SPITType index out of range"; - } -} - -void SPITType::eventProjectClosed() { - for (auto i = sSpitTypes.begin(); i != sSpitTypes.end(); i++) { +void SPITType::eventProjectClosed(SpitRepo &repo, SpitRepo &remoteRepo) { + auto &entries = repo.getRepo(); + for (auto i = entries.begin(); i != entries.end(); i++) { SPITType *ptrSPITType = i->second.get(); if (ptrSPITType->getCreatedByClient() == true) { continue; } - i = sSpitTypes.erase(i); + i = entries.erase(i); } // Remote - sSpitTypesRemote.clear(); + remoteRepo.clearEntries(); } /** * Sets confirmed = false for all SPITTypes. * This should be called when the client has loaded a project. */ -void SPITType::setConfirmedFalse() { - for (auto i = sSpitTypes.begin(); i != sSpitTypes.end(); i++) { +void SPITType::setConfirmedFalse(SpitRepo &repo) { + auto &entries = repo.getRepo(); + for (auto i = entries.begin(); i != entries.end(); i++) { i->second->setConfirmed(false); } } diff --git a/components/spit/src/SPIT_Client.cpp b/components/spit/src/SPIT_Client.cpp index 80a8754..a57d64e 100644 --- a/components/spit/src/SPIT_Client.cpp +++ b/components/spit/src/SPIT_Client.cpp @@ -52,8 +52,8 @@ void SPIT_Client::clientProjectClose() { void SPIT_Client::clientProjectLoaded() { // set confirmed = false for all SPITTypes and SPITObjects - SPITType::setConfirmedFalse(); - SPITObject::setConfirmedFalse(); + SPITType::setConfirmedFalse(mSpitTypes); + SPITObject::setConfirmedFalse(mSpitObjects); if (m_ConnectionStatus == CONNECTION_OK) { // send ReportSPITProject to the server @@ -80,14 +80,14 @@ void SPIT_Client::clientProjectLoaded() { * @param p_ActionAssigned */ void SPIT_Client::setActionSPITType(string p_SPITTypeID, bool p_ActionAssigned) { - SPITType *ptrSPITType = SPITType::getSPITType(p_SPITTypeID); + SPITType *ptrSPITType = mSpitTypes.getEntry(p_SPITTypeID); if (ptrSPITType == nullptr) return; if (ptrSPITType->setActionAssigned(p_ActionAssigned) == true) { sendSPITTypeInternal(*ptrSPITType); - for (int i = 0; i < SPITObject::getSPITObjectCount(); i++) { - SPITObject *ptrSPITObject = SPITObject::getSPITObject(i); + for (int i = 0; i < mSpitObjects.getEntryCount(); i++) { + SPITObject *ptrSPITObject = mSpitObjects.getEntry(i); if (ptrSPITObject == nullptr) continue; if (ptrSPITObject->getSPITTypeID() == ptrSPITType->getID()) { @@ -107,7 +107,7 @@ void SPIT_Client::setActionSPITType(string p_SPITTypeID, bool p_ActionAssigned) void SPIT_Client::setActionSPITObject(string p_SPITObjectID, bool p_ActionAssigned) { SPITObject *ptrSPITObject; { - ptrSPITObject = SPITObject::getSPITObject(p_SPITObjectID); + ptrSPITObject = mSpitObjects.getEntry(p_SPITObjectID); if (ptrSPITObject == nullptr) return; if (ptrSPITObject->setActionAssigned(p_ActionAssigned) == true) { @@ -686,8 +686,8 @@ void SPIT_Client::parseReportSPITProject(SPIT_Message::ReportSPITProject *p_Repo mCallbacks.onProjectUpdate(ProjUpdate::ServerLoaded, m_ServerProjectID); // Set all SPITTypes and SPITObjects confirmed = false - SPITType::setConfirmedFalse(); - SPITObject::setConfirmedFalse(); + SPITType::setConfirmedFalse(mSpitTypes); + SPITObject::setConfirmedFalse(mSpitObjects); // Send RequestProjectTransfer auto sMRequestProjectTransfer = make_unique(); @@ -727,18 +727,18 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf } // send all listes SPITTypes - int cntT = SPITType::getSPITTypeCount(); + int cntT = mSpitTypes.getEntryCount(); for (int i = 0; i < cntT; i++) { - SPITType *ptrSPITType = SPITType::getSPITType(i); + SPITType *ptrSPITType = mSpitTypes.getEntry(i); if (ptrSPITType == nullptr) break; sendSPITTypeInternal(*ptrSPITType); fos::Task::delayMs(10); } - int cntO = SPITObject::getSPITObjectCount(); + int cntO = mSpitObjects.getEntryCount(); for (int i = 0; i < cntO; i++) { - SPITObject *ptrSPITObject = SPITObject::getSPITObject(i); + SPITObject *ptrSPITObject = mSpitObjects.getEntry(i); if (ptrSPITObject == nullptr) break; sendSPITObjectInternal(ptrSPITObject); @@ -782,7 +782,7 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf // unique_lock o_LockType(*SPITType::getMutex()); // intCount = SPITType::getSPITTypeCount(); // for (int i = 0; i < intCount; i++) { - // ptrSPITType = SPITType::getSPITType(i); + // ptrSPITType = mSpitTypes.getEntry(i); // if (ptrSPITType == nullptr) continue; // intResult = sendSPITTypeInternal(ptrSPITType); // if (intResult < 0) return; @@ -793,9 +793,9 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf // { // unique_lock o_LockObject(*SPITObject::getMutex()); - // intCount = SPITObject::getSPITObjectCount(); + // intCount = mSpitObjects.getEntryCount(); // for (int i = 0; i < intCount; i++) { - // ptrSPITObject = SPITObject::getSPITObject(i); + // ptrSPITObject = mSpitObjects.getEntry(i); // if (ptrSPITObject == nullptr) continue; // intResult = sendSPITObjectInternal(ptrSPITObject); // if (intResult < 0) return; @@ -842,7 +842,7 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) { // // unique_lock o_LockType(*SPITType::getMutex()); // intCount = SPITType::getSPITTypeCount(); // for (int i = 0; i < intCount; i++) { - // ptrSPITType = SPITType::getSPITType(i); + // ptrSPITType = mSpitTypes.getEntry(i); // if (ptrSPITType == nullptr) continue; // if (ptrSPITType->getCreatedByClient() == false) continue; // intResult = p_PtrSPIT_Client->sendSPITTypeInternal(ptrSPITType); @@ -854,9 +854,9 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) { // // { // // unique_lock o_LockObject(*SPITObject::getMutex()); - // intCount = SPITObject::getSPITObjectCount(); + // intCount = mSpitObjects.getEntryCount(); // for (int i = 0; i < intCount; i++) { - // ptrSPITObject = SPITObject::getSPITObject(i); + // ptrSPITObject = mSpitObjects.getEntry(i); // if (ptrSPITObject == nullptr) continue; // if (ptrSPITObject->getCreatedByClient() == false) continue; // intResult = p_PtrSPIT_Client->sendSPITObjectInternal(ptrSPITObject); @@ -883,7 +883,7 @@ void SPIT_Client::parseStartProjectTransfer(SPIT_Message::StartProjectTransfer * mCallbacks.onProjectUpdate(ProjUpdate::StartTransfer, m_ServerProjectID); } void SPIT_Client::parseEndProjectTransfer(SPIT_Message::EndProjectTransfer *p_EndProjectTransfer) { - SPITObject::clearUnconfirmedSPITObjects(); + SPITObject::clearUnconfirmedSPITObjects(mSpitObjects); mCallbacks.onProjectUpdate(ProjUpdate::EndTransfer, m_ServerProjectID); // Send SPIT_Message::ReportSPITProject after the m_SPITClientInterface is notfied of EndProjectTransfer @@ -904,7 +904,7 @@ void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType *p_ReportSPIT bool boolChanged = false; { if (p_ReportSPITType->getServerRemote() == false) { - ptrSPITType = SPITType::getSPITType(p_ReportSPITType->getID()); + ptrSPITType = mSpitTypes.getEntry(p_ReportSPITType->getID()); if (ptrSPITType == nullptr) { // The user's app my veto the SPITType if (mCallbacks.onCheckSpitTypeVeto(p_ReportSPITType) == false) { @@ -912,15 +912,15 @@ void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType *p_ReportSPIT } auto spitType = make_unique(p_ReportSPITType->getID()); ptrSPITType = spitType.get(); - SPITType::addSPITType(move(spitType)); + mSpitTypes.addEntry(move(spitType)); boolNew = true; } } else { - ptrSPITType = SPITType::getSPITTypeRemote(p_ReportSPITType->getID()); + ptrSPITType = mRemoteSpitTypes.getEntry(p_ReportSPITType->getID()); if (ptrSPITType == nullptr) { auto spitType = make_unique(p_ReportSPITType->getID()); ptrSPITType = spitType.get(); - SPITType::addSPITTypeRemote(move(spitType)); + mRemoteSpitTypes.addEntry(move(spitType)); boolNew = true; } } @@ -949,11 +949,11 @@ void SPIT_Client::parseRemoveSPITType(SPIT_Message::RemoveSPITType *p_RemoveSPIT bool boolRemote = false; string stringSPITTypeID = p_RemoveSPITType->getID(); - SPITType *ptrSPITType = SPITType::getSPITTypeRemote(stringSPITTypeID); + SPITType *ptrSPITType = mRemoteSpitTypes.getEntry(stringSPITTypeID); if (!ptrSPITType) { boolRemote = true; } else { - ptrSPITType = SPITType::getSPITType(stringSPITTypeID); + ptrSPITType = mSpitTypes.getEntry(stringSPITTypeID); if (!ptrSPITType) { boolRemote = false; } else { @@ -971,9 +971,9 @@ void SPIT_Client::parseRemoveSPITType(SPIT_Message::RemoveSPITType *p_RemoveSPIT mCallbacks.onSpitType(ObjectEvent::Deleted, boolRemote, *ptrSPITType); if (boolRemote == false) { - SPITType::removeSPITType(*ptrSPITType); + mSpitTypes.removeEntry(*ptrSPITType); } else { - SPITType::removeSPITTypeRemote(*ptrSPITType); + mRemoteSpitTypes.removeEntry(*ptrSPITType); } } @@ -997,7 +997,7 @@ int SPIT_Client::sendSPITTypeInternal(SPITType &p_SPITType) { bool SPIT_Client::changeSPITType(SPITType *p_SPITType) { if (p_SPITType == nullptr) return false; - SPITType *ptrSPITType = SPITType::getSPITType(p_SPITType->getID()); + SPITType *ptrSPITType = mSpitTypes.getEntry(p_SPITType->getID()); if (ptrSPITType == nullptr) return false; @@ -1027,13 +1027,13 @@ int SPIT_Client::removeSPITType(string p_SPITTypeID) { return -1; SPITType *ptrSPITType; { - ptrSPITType = SPITType::getSPITType(p_SPITTypeID); + ptrSPITType = mSpitTypes.getEntry(p_SPITTypeID); if (ptrSPITType == nullptr) return -1; auto sMRemoveSPITType = make_unique(); ptrSPITType->fillMessageOP(*sMRemoveSPITType); mCallbacks.onSpitType(ObjectEvent::Deleted, false, *ptrSPITType); - SPITType::removeSPITType(*ptrSPITType); + mSpitTypes.removeEntry(*ptrSPITType); return sendSPITMessage(move(sMRemoveSPITType)); } return -1; @@ -1045,11 +1045,11 @@ SPITType *SPIT_Client::createSPITTypeFixed(string p_ID, string p_GroupName, stri SPITType *SPIT_Client::createSPITType(string p_ID, string p_GroupName, string p_Name, long long p_DefaultDelay, long long p_DefaultDuration, bool p_FIxed, bool p_ProjectIndepended) { bool boolNew; - SPITType *ptrSPITType = SPITType::getSPITType(p_ID); + SPITType *ptrSPITType = mSpitTypes.getEntry(p_ID); if (ptrSPITType == nullptr) { auto spitType = make_unique(p_ID, p_GroupName, p_Name, p_FIxed, p_ProjectIndepended, p_DefaultDelay, p_DefaultDuration); ptrSPITType = spitType.get(); - SPITType::addSPITType(move(spitType)); + mSpitTypes.addEntry(move(spitType)); ptrSPITType->setCreatedByClient(true); boolNew = true; } else { @@ -1083,15 +1083,15 @@ void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject *p_Report ESP_LOGD(TAG, "parseReportSPITObject %s / %s", p_ReportSPITObject->getID().c_str(), p_ReportSPITObject->getName().c_str()); if (p_ReportSPITObject->getServerRemote() == false) { boolRemote = false; - ptrSPITObject = SPITObject::getSPITObject(p_ReportSPITObject->getID()); - ptrSPITType = SPITType::getSPITType(p_ReportSPITObject->getSPITTypeID()); + ptrSPITObject = mSpitObjects.getEntry(p_ReportSPITObject->getID()); + ptrSPITType = mSpitTypes.getEntry(p_ReportSPITObject->getSPITTypeID()); if (ptrSPITType == nullptr) { // No associated SPITType found if (ptrSPITObject != nullptr) { // SpitObject exists but has no corresponding SPITType -> remove the SPITObject without sending a message // Maybe the SPITObject has changed the SPITTypeID to a SPITTypeID of another board - SPITObject::removeSPITObject(*ptrSPITObject); + mSpitObjects.removeEntry(*ptrSPITObject); } return; } @@ -1103,21 +1103,21 @@ void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject *p_Report } auto spitObj = make_unique(p_ReportSPITObject->getID()); ptrSPITObject = spitObj.get(); - SPITObject::addSPITObject(move(spitObj)); + mSpitObjects.addEntry(move(spitObj)); boolNew = true; } else { // The user's app my veto the SPITType if (mCallbacks.onCheckSpitObjectVeto(p_ReportSPITObject) == false) { // SpitObject exists and User APp denied the SPITObject -> remove the SPITObject without sending a message - SPITObject::removeSPITObject(*ptrSPITObject); + mSpitObjects.removeEntry(*ptrSPITObject); ESP_LOGD(TAG, "TypeVeto %s / %s", p_ReportSPITObject->getID().c_str(), p_ReportSPITObject->getName().c_str()); return; } } } else { boolRemote = true; - ptrSPITObject = SPITObject::getSPITObjectRemote(p_ReportSPITObject->getID()); - ptrSPITType = SPITType::getSPITTypeRemote(p_ReportSPITObject->getSPITTypeID()); + ptrSPITObject = mRemoteSpitObjects.getEntry(p_ReportSPITObject->getID()); + ptrSPITType = mRemoteSpitTypes.getEntry(p_ReportSPITObject->getSPITTypeID()); if (ptrSPITType == nullptr) { // No associated SPITType found return; @@ -1125,7 +1125,7 @@ void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject *p_Report if (ptrSPITObject == nullptr) { auto spitObj = make_unique(p_ReportSPITObject->getID()); ptrSPITObject = spitObj.get(); - SPITObject::addSPITObjectRemote(move(spitObj)); + mRemoteSpitObjects.addEntry(move(spitObj)); boolNew = true; } } @@ -1157,13 +1157,13 @@ void SPIT_Client::parseRemoveSPITObject(SPIT_Message::RemoveSPITObject *p_Remove return; } - SPITObject *ptrSPITObject = SPITObject::getSPITObjectRemote(p_RemoveSPITObject->getID()); + SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_RemoveSPITObject->getID()); if (ptrSPITObject != nullptr) { - SPITType *ptrSPITType = SPITType::getSPITTypeRemote(ptrSPITObject->getSPITTypeID()); + SPITType *ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->getSPITTypeID()); if (ptrSPITType != nullptr) { mCallbacks.onSpitObject(ObjectEvent::Deleted, true, *ptrSPITType, *ptrSPITObject); } - SPITObject::removeSPITObjectRemote(*ptrSPITObject); + mRemoteSpitObjects.removeEntry(*ptrSPITObject); } else { // call removeSPITObject, this will notify the server that the object is removed removeSPITObject(p_RemoveSPITObject->getID()); @@ -1192,10 +1192,10 @@ bool SPIT_Client::changeSPITObject(SPITObject *p_SPITObject) { SPITObject *ptrSPITObject; SPITType *ptrSPITType; { - ptrSPITObject = SPITObject::getSPITObject(p_SPITObject->getID()); + ptrSPITObject = mSpitObjects.getEntry(p_SPITObject->getID()); if (ptrSPITObject == nullptr) return false; - ptrSPITType = SPITType::getSPITType(p_SPITObject->getID()); + ptrSPITType = mSpitTypes.getEntry(p_SPITObject->getID()); if (ptrSPITObject == nullptr) return false; @@ -1239,15 +1239,15 @@ int SPIT_Client::removeSPITObject(string p_SPITObjectID) { { auto sMRemoveSPITObject = make_unique(); - ptrSPITObject = SPITObject::getSPITObject(p_SPITObjectID); + ptrSPITObject = mSpitObjects.getEntry(p_SPITObjectID); if (ptrSPITObject == nullptr) return -1; - ptrSPITType = SPITType::getSPITType(ptrSPITObject->getSPITTypeID()); + ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->getSPITTypeID()); if (ptrSPITType == nullptr) return -1; ptrSPITObject->fillMessageOP(*sMRemoveSPITObject); mCallbacks.onSpitObject(ObjectEvent::Deleted, false, *ptrSPITType, *ptrSPITObject); - SPITObject::removeSPITObject(*ptrSPITObject); + mSpitObjects.removeEntry(*ptrSPITObject); return sendSPITMessage(move(sMRemoveSPITObject)); } return -1; @@ -1269,7 +1269,7 @@ void SPIT_Client::parsePlaySPITStart(SPIT_Message::PlaySPITStart *p_PlaySPITStar void SPIT_Client::parsePlaySPITObject(SPIT_Message::PlaySPITObject *p_PlaySPITObject) { SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITObject->getPlayerID()); - SPITObject *ptrSPITObject = SPITObject::getSPITObject(p_PlaySPITObject->getSPITObjectID()); + SPITObject *ptrSPITObject = mSpitObjects.getEntry(p_PlaySPITObject->getSPITObjectID()); if (ptrSPITObject == nullptr) { return; @@ -1300,11 +1300,11 @@ void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd *p_PlaySPITEnd) { // boolStopped = true; // } // { - // ptrSPITObject = SPITObject::getSPITObject(ptrPlayObject->getSPITObjectID()); + // ptrSPITObject = mSpitObjects.getEntry(ptrPlayObject->getSPITObjectID()); // if (ptrSPITObject == nullptr) { // return; // } - // SPITType *ptrSPITType = SPITType::getSPITType(ptrSPITObject->getSPITTypeID()); + // SPITType *ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->getSPITTypeID()); // if (ptrSPITType == nullptr) { // return; // } @@ -1321,7 +1321,7 @@ void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd *p_PlaySPITEnd) { SPITPlayer::PlaySPITType *ptrPlaySPITType = i->second; bool boolStarted = ptrPlaySPITType->getIsNew(); bool boolStopped = (ptrPlaySPITType->getIsPlayed() == false); - SPITType *ptrSPITType = SPITType::getSPITType(ptrPlaySPITType->getSPITTypeID()); + SPITType *ptrSPITType = mSpitTypes.getEntry(ptrPlaySPITType->getSPITTypeID()); if (ptrSPITType == nullptr) { // set isplayed to false, the ptrPlayObject will be removed by ptrSPITPlayer.endPlaySequence() ptrPlaySPITType->setIsPlayed(false); @@ -1335,17 +1335,17 @@ void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd *p_PlaySPITEnd) { void SPIT_Client::parseReportPlayStatus(SPIT_Message::ReportPlayStatus *p_ReportPlayStatus) { SPITType *ptrSPITType = NULL; - SPITObject *ptrSPITObject = SPITObject::getSPITObjectRemote(p_ReportPlayStatus->getID()); + SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_ReportPlayStatus->getID()); if (ptrSPITObject == nullptr) { - ptrSPITObject = SPITObject::getSPITObject(p_ReportPlayStatus->getID()); + ptrSPITObject = mSpitObjects.getEntry(p_ReportPlayStatus->getID()); if (ptrSPITObject == nullptr) { return; } } if (ptrSPITObject->getServerRemote() == false) { - ptrSPITType = SPITType::getSPITType(ptrSPITObject->getSPITTypeID()); + ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->getSPITTypeID()); } else { - ptrSPITType = SPITType::getSPITTypeRemote(ptrSPITObject->getSPITTypeID()); + ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->getSPITTypeID()); } if (ptrSPITType == nullptr) { @@ -1373,7 +1373,7 @@ void SPIT_Client::parseReportPlayStatus(SPIT_Message::ReportPlayStatus *p_Report void SPIT_Client::sendRemoteObject(string p_SPITObjectID, int p_Valueppm, char p_ValueFlag) { SPITObject *ptrRemoteSPITObject; { - ptrRemoteSPITObject = SPITObject::getSPITObjectRemote(p_SPITObjectID); + ptrRemoteSPITObject = mRemoteSpitObjects.getEntry(p_SPITObjectID); if (ptrRemoteSPITObject == nullptr) return; diff --git a/main/watchMain.cpp b/main/watchMain.cpp index 3e30aa6..722c991 100644 --- a/main/watchMain.cpp +++ b/main/watchMain.cpp @@ -733,20 +733,20 @@ void onProjectUpdate(SPIT_Client::ProjUpdate state, string projectId) { bool onCheckSpitTypeVeto(SPIT_Message::ReportSPITType *p_ReportSPITType) { return true; // Bypass veto - if (p_ReportSPITType == nullptr) - return true; - SPITType *ptrSPITType; - ptrSPITType = SPITType::getSPITType(p_ReportSPITType->getID()); + // if (p_ReportSPITType == nullptr) + // return true; + // SPITType *ptrSPITType; + // ptrSPITType = SPITType::getSPITType(p_ReportSPITType->getID()); // Don't allow foreign SPITTypes - if (ptrSPITType == nullptr) { - // ESP_LOGW(TAG, "ObjectVeto NoSpitType"); - return false; - } - if (ptrSPITType->getCreatedByClient() == false) { - // ESP_LOGW(TAG, "getCreatedByClient"); - return false; - } + // if (ptrSPITType == nullptr) { + // // ESP_LOGW(TAG, "ObjectVeto NoSpitType"); + // return false; + // } + // if (ptrSPITType->getCreatedByClient() == false) { + // // ESP_LOGW(TAG, "getCreatedByClient"); + // return false; + // } return true; } @@ -755,23 +755,23 @@ bool onCheckSpitObjectVeto(SPIT_Message::ReportSPITObject *p_ReportSPITObject) { if (p_ReportSPITObject == nullptr) return true; - SPITType *ptrSPITType = SPITType::getSPITType(p_ReportSPITObject->getSPITTypeID()); - if (ptrSPITType == nullptr) { - // ESP_LOGW(TAG, "ObjectVeto NoSpitObj"); - return false; - } + // SPITType *ptrSPITType = SPITType::getSPITType(p_ReportSPITObject->getSPITTypeID()); + // if (ptrSPITType == nullptr) { + // // ESP_LOGW(TAG, "ObjectVeto NoSpitObj"); + // return false; + // } // Don't allow SPITObjects which refers to a SPITType which is not created by this client - other SPITTypes cannot be handled here - if (ptrSPITType->getCreatedByClient() == false) { - // ESP_LOGW(TAG, "getCreatedByClient"); - return false; - } - SPITObject *ptrSPITObject = SPITObject::getSPITObject(p_ReportSPITObject->getID()); - // Don't allow foreign SPITTypes - if (ptrSPITObject == nullptr) { - // ESP_LOGE(TAG, "Unknown ID"); - return false; - } + // if (ptrSPITType->getCreatedByClient() == false) { + // // ESP_LOGW(TAG, "getCreatedByClient"); + // return false; + // } + // SPITObject *ptrSPITObject = SPITObject::getSPITObject(p_ReportSPITObject->getID()); + // // Don't allow foreign SPITTypes + // if (ptrSPITObject == nullptr) { + // // ESP_LOGE(TAG, "Unknown ID"); + // return false; + // } return true; } @@ -790,18 +790,18 @@ void onSpitType(SPIT_Client::ObjectEvent event, bool isRemote, const SPITType &p } else if (event == SPIT_Client::ObjectEvent::Changed) { // we had to inform all Remote SPITObjects using the p_SPITType // perhaps the SPITObject uses information from the SPITType - SPITObject *ptrSPITObject; - int intSPITObjectCount; - intSPITObjectCount = SPITObject::getSPITObjectRemoteCount(); - for (int intObject = 0; intObject < intSPITObjectCount; intObject++) { - ptrSPITObject = SPITObject::getSPITObjectRemote(intObject); - if (ptrSPITObject == nullptr) - continue; - if (ptrSPITObject->getSPITTypeID() == p_SPITType.getID()) { - // call ecentSPITObjectRemote - // onSpitObjectRemote(SPIT_Client::ObjectEvent::Changed, p_SPITType, *ptrSPITObject); - } - } + // SPITObject *ptrSPITObject; + // int intSPITObjectCount; + // intSPITObjectCount = SPITObject::getSPITObjectRemoteCount(); + // for (int intObject = 0; intObject < intSPITObjectCount; intObject++) { + // ptrSPITObject = SPITObject::getSPITObjectRemote(intObject); + // if (ptrSPITObject == nullptr) + // continue; + // if (ptrSPITObject->getSPITTypeID() == p_SPITType.getID()) { + // // call ecentSPITObjectRemote + // // onSpitObjectRemote(SPIT_Client::ObjectEvent::Changed, p_SPITType, *ptrSPITObject); + // } + // } ESP_LOGI(TAG, "SPIT-REMOTE-Type CHANGED ID: %s GroupName: %s Name: %s confirmed: %d", p_SPITType.getID().data(), p_SPITType.getGroupName().data(), p_SPITType.getName().data(), p_SPITType.getConfirmed()); } else if (event == SPIT_Client::ObjectEvent::Deleted) { ESP_LOGD(TAG, "SPIT-REMOTE-Type Removed ID: %s GroupName: %s Name: %s\n", p_SPITType.getID().data(), p_SPITType.getGroupName().data(), p_SPITType.getName().data());