From b4277e92610efbbe4c7d55c56cbe2fe7bcaad87b Mon Sep 17 00:00:00 2001 From: Jakob Gegeniger Date: Tue, 8 Apr 2025 01:07:08 +0200 Subject: [PATCH] refactor: using references where possible --- components/spit/include/SPIT_Client.h | 34 +-- components/spit/include/SPIT_Message.h | 2 + components/spit/src/SPIT_Client.cpp | 328 +++++++++++-------------- 3 files changed, 164 insertions(+), 200 deletions(-) diff --git a/components/spit/include/SPIT_Client.h b/components/spit/include/SPIT_Client.h index 3b40b8a..6d736e6 100644 --- a/components/spit/include/SPIT_Client.h +++ b/components/spit/include/SPIT_Client.h @@ -212,10 +212,10 @@ class SPIT_Client : I_SAD_Client { void parseSPIT_Message(unique_ptr p_SPITMessage); void checkParseSPIT_Message(unique_ptr p_SPITMessage); void addOvertakingSPIT_Message(unique_ptr p_SPIT_Message); - void parseConnectAnswer(SPIT_Message::ConnectAnswer *p_ConnectAnswer); - void parseDisconnect(SPIT_Message::Disconnect *p_Disconnect); - void parseWatchdog(SPIT_Message::Watchdog *p_Watchdog); - void parseWatchdogAnswer(SPIT_Message::WatchdogAnswer *p_WatchdogAnswer); + void parseConnectAnswer(SPIT_Message::ConnectAnswer &p_ConnectAnswer); + void parseDisconnect(SPIT_Message::Disconnect &p_Disconnect); + void parseWatchdog(SPIT_Message::Watchdog &p_Watchdog); + void parseWatchdogAnswer(SPIT_Message::WatchdogAnswer &p_WatchdogAnswer); public: /** Used internally*/ @@ -224,8 +224,8 @@ class SPIT_Client : I_SAD_Client { void eventWatchdogLost(); //--------------- SPIT Project --------------- private: - void parseReportSPITProject(SPIT_Message::ReportSPITProject *p_ReportSPITProject); - void parseCloseSPITProject(SPIT_Message::CloseSPITProject *p_CloseSPITProject); + void parseReportSPITProject(SPIT_Message::ReportSPITProject &p_ReportSPITProject); + void parseCloseSPITProject(SPIT_Message::CloseSPITProject &p_CloseSPITProject); public: /** Returns the SPITServer's project ID - may be the same as the project's name*/ @@ -236,9 +236,9 @@ class SPIT_Client : I_SAD_Client { int getServerFramesPerSecond(); private: - void parseRequestProjectTransfer(SPIT_Message::RequestProjectTransfer *p_RequestProjectTransfer); - void parseStartProjectTransfer(SPIT_Message::StartProjectTransfer *p_StartProjectTransfer); - void parseEndProjectTransfer(SPIT_Message::EndProjectTransfer *p_EndProjectTransfer); + void parseRequestProjectTransfer(SPIT_Message::RequestProjectTransfer &p_RequestProjectTransfer); + void parseStartProjectTransfer(SPIT_Message::StartProjectTransfer &p_StartProjectTransfer); + void parseEndProjectTransfer(SPIT_Message::EndProjectTransfer &p_EndProjectTransfer); public: static void sendProject(SPIT_Client *p_PtrSPIT_Client); @@ -274,8 +274,8 @@ class SPIT_Client : I_SAD_Client { private: // receive SPITTypes - void parseReportSPITType(SPIT_Message::ReportSPITType *p_ReportSPITType); - void parseRemoveSPITType(SPIT_Message::RemoveSPITType *p_RemoveSPITType); + void parseReportSPITType(SPIT_Message::ReportSPITType &p_ReportSPITType); + void parseRemoveSPITType(SPIT_Message::RemoveSPITType &p_RemoveSPITType); int sendSPITTypeInternal(SPITType &p_SPITType); public: @@ -297,8 +297,8 @@ class SPIT_Client : I_SAD_Client { public: //--------------- SPIT Objects --------------- private: - void parseReportSPITObject(SPIT_Message::ReportSPITObject *p_ReportSPITObject); - void parseRemoveSPITObject(SPIT_Message::RemoveSPITObject *p_RemoveSPITObject); + void parseReportSPITObject(SPIT_Message::ReportSPITObject &p_ReportSPITObject); + void parseRemoveSPITObject(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject); int sendSPITObjectInternal(SPITObject *ptrSPITObject); public: @@ -320,10 +320,10 @@ class SPIT_Client : I_SAD_Client { public: //--------------- Play SPIT Objects --------------- private: - void parsePlaySPITStart(SPIT_Message::PlaySPITStart *p_PlaySPITStart); - void parsePlaySPITObject(SPIT_Message::PlaySPITObject *p_PlaySPITObject); - void parsePlaySPITEnd(SPIT_Message::PlaySPITEnd *p_PlaySPITEnd); - void parseReportPlayStatus(SPIT_Message::ReportPlayStatus *p_ReportPlayStatus); + void parsePlaySPITStart(SPIT_Message::PlaySPITStart &p_PlaySPITStart); + void parsePlaySPITObject(SPIT_Message::PlaySPITObject &p_PlaySPITObject); + void parsePlaySPITEnd(SPIT_Message::PlaySPITEnd &p_PlaySPITEnd); + void parseReportPlayStatus(SPIT_Message::ReportPlayStatus &p_ReportPlayStatus); public: //--------- Remote ---------- diff --git a/components/spit/include/SPIT_Message.h b/components/spit/include/SPIT_Message.h index 242f06a..89a0239 100644 --- a/components/spit/include/SPIT_Message.h +++ b/components/spit/include/SPIT_Message.h @@ -156,6 +156,8 @@ class SPIT_Message { return m_OPPart->getHeader()->getOPFlag(); } const OPPart *getOPPart() const { return m_OPPart.get(); } + template + T &getOPPartAs() const { return *reinterpret_cast(m_OPPart.get()); } private: bool parse(std::vector message); diff --git a/components/spit/src/SPIT_Client.cpp b/components/spit/src/SPIT_Client.cpp index a03df9e..5929726 100644 --- a/components/spit/src/SPIT_Client.cpp +++ b/components/spit/src/SPIT_Client.cpp @@ -213,8 +213,7 @@ void SPIT_Client::eventServerChanged(SAD_DetectedServer &server) { // // } //Excample // } - -int SPIT_Client::sendSPITMessage(SPIT_Message::OPPart& opPart) { +int SPIT_Client::sendSPITMessage(SPIT_Message::OPPart &opPart) { if (m_MessageNumber_Send == 255) m_MessageNumber_Send = 1; else @@ -278,16 +277,8 @@ void SPIT_Client::resetMessageNumberReceived() { void SPIT_Client::checkParseSPIT_Message(unique_ptr p_SPITMessage) { answerWatchdog(); - if (p_SPITMessage == nullptr) { - ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message Parameter == nullptr\n"); - return; - } - if (p_SPITMessage->getHeader() == nullptr) { - ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message no Header\n"); - return; - } - if (p_SPITMessage->getOPPart() == nullptr) { - ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message no OPPart\n"); + if (!p_SPITMessage || !p_SPITMessage->getHeader() || p_SPITMessage->getOPPart()) { + ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message incomplete message"); return; } @@ -361,82 +352,69 @@ void SPIT_Client::addOvertakingSPIT_Message(unique_ptr p_SPIT_Mess void SPIT_Client::parseSPIT_Message(unique_ptr p_SPITMessage) { answerWatchdog(); - if (!p_SPITMessage) { - ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message Parameter == nullptr"); - return; - } - if (p_SPITMessage->getHeader() == nullptr) { - ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message no Header"); - return; - } - if (p_SPITMessage->getOPPart() == nullptr) { - ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message no OPPart"); + if (!p_SPITMessage || !p_SPITMessage->getHeader() || !p_SPITMessage->getOPPart()) { + ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message incomplete message"); return; } + + switch (p_SPITMessage->getOPFlag()) { //----- Connection ----- - if (p_SPITMessage->getOPFlag() == SPIT_Message::ConnectAnswer::OPFLAG) { - SPIT_Message::ConnectAnswer *o_ConnectAnswer = (SPIT_Message::ConnectAnswer *)p_SPITMessage->getOPPart(); - parseConnectAnswer(o_ConnectAnswer); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::Disconnect::OPFLAG) { - SPIT_Message::Disconnect *o_Disconnect = (SPIT_Message::Disconnect *)p_SPITMessage->getOPPart(); - parseDisconnect(o_Disconnect); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::ReportSPITProject::OPFLAG) { - SPIT_Message::ReportSPITProject *o_ReportSPITProject = (SPIT_Message::ReportSPITProject *)p_SPITMessage->getOPPart(); - parseReportSPITProject(o_ReportSPITProject); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::Watchdog::OPFLAG) { - SPIT_Message::Watchdog *o_Watchdog = (SPIT_Message::Watchdog *)p_SPITMessage->getOPPart(); - parseWatchdog(o_Watchdog); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::WatchdogAnswer::OPFLAG) { - SPIT_Message::WatchdogAnswer *o_WatchdogAnswer = (SPIT_Message::WatchdogAnswer *)p_SPITMessage->getOPPart(); - parseWatchdogAnswer(o_WatchdogAnswer); - } + case SPIT_Message::ConnectAnswer::OPFLAG: + parseConnectAnswer(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::Disconnect::OPFLAG: + parseDisconnect(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::ReportSPITProject::OPFLAG: + parseReportSPITProject(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::Watchdog::OPFLAG: + parseWatchdog(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::WatchdogAnswer::OPFLAG: + parseWatchdogAnswer(p_SPITMessage->getOPPartAs()); + break; //----- SPIT Project ----- - else if (p_SPITMessage->getOPFlag() == SPIT_Message::StartProjectTransfer::OPFLAG) { - SPIT_Message::StartProjectTransfer *o_StartProjectTransfer = (SPIT_Message::StartProjectTransfer *)p_SPITMessage->getOPPart(); - parseStartProjectTransfer(o_StartProjectTransfer); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::CloseSPITProject::OPFLAG) { - SPIT_Message::CloseSPITProject *o_CloseSPITProjectr = (SPIT_Message::CloseSPITProject *)p_SPITMessage->getOPPart(); - parseCloseSPITProject(o_CloseSPITProjectr); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::RequestProjectTransfer::OPFLAG) { - SPIT_Message::RequestProjectTransfer *o_RequestProjectTransfer = (SPIT_Message::RequestProjectTransfer *)p_SPITMessage->getOPPart(); - parseRequestProjectTransfer(o_RequestProjectTransfer); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::StartProjectTransfer::OPFLAG) { - SPIT_Message::StartProjectTransfer *o_StartProjectTransfer = (SPIT_Message::StartProjectTransfer *)p_SPITMessage->getOPPart(); - parseStartProjectTransfer(o_StartProjectTransfer); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::EndProjectTransfer::OPFLAG) { - SPIT_Message::EndProjectTransfer *o_EndProjectTransfer = (SPIT_Message::EndProjectTransfer *)p_SPITMessage->getOPPart(); - parseEndProjectTransfer(o_EndProjectTransfer); - } + case SPIT_Message::StartProjectTransfer::OPFLAG: + parseStartProjectTransfer(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::CloseSPITProject::OPFLAG: + parseCloseSPITProject(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::RequestProjectTransfer::OPFLAG: + parseRequestProjectTransfer(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::EndProjectTransfer::OPFLAG: + parseEndProjectTransfer(p_SPITMessage->getOPPartAs()); + break; //----- SPIT Types ------ - else if (p_SPITMessage->getOPFlag() == SPIT_Message::ReportSPITType::OPFLAG) { - SPIT_Message::ReportSPITType *o_ReportSPITType = (SPIT_Message::ReportSPITType *)p_SPITMessage->getOPPart(); - parseReportSPITType(o_ReportSPITType); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::RemoveSPITType::OPFLAG) { - SPIT_Message::RemoveSPITType *o_RemoveSPITType = (SPIT_Message::RemoveSPITType *)p_SPITMessage->getOPPart(); - parseRemoveSPITType(o_RemoveSPITType); - } - //----- SPIT Objects ------ - else if (p_SPITMessage->getOPFlag() == SPIT_Message::ReportSPITObject::OPFLAG) { - SPIT_Message::ReportSPITObject *o_ReportSPITObject = (SPIT_Message::ReportSPITObject *)p_SPITMessage->getOPPart(); - parseReportSPITObject(o_ReportSPITObject); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::RemoveSPITObject::OPFLAG) { - SPIT_Message::RemoveSPITObject *o_RemoveSPITObject = (SPIT_Message::RemoveSPITObject *)p_SPITMessage->getOPPart(); - parseRemoveSPITObject(o_RemoveSPITObject); - } - //----- Play SPIT Objects ------ - else if (p_SPITMessage->getOPFlag() == SPIT_Message::PlaySPITStart::OPFLAG) { - SPIT_Message::PlaySPITStart *o_PlaySPITStart = (SPIT_Message::PlaySPITStart *)p_SPITMessage->getOPPart(); - parsePlaySPITStart(o_PlaySPITStart); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::PlaySPITObject::OPFLAG) { - SPIT_Message::PlaySPITObject *o_PlaySPITObject = (SPIT_Message::PlaySPITObject *)p_SPITMessage->getOPPart(); - parsePlaySPITObject(o_PlaySPITObject); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::PlaySPITEnd::OPFLAG) { - SPIT_Message::PlaySPITEnd *o_PlaySPITEnd = (SPIT_Message::PlaySPITEnd *)p_SPITMessage->getOPPart(); - parsePlaySPITEnd(o_PlaySPITEnd); - } else if (p_SPITMessage->getOPFlag() == SPIT_Message::ReportPlayStatus::OPFLAG) { - SPIT_Message::ReportPlayStatus *o_ReportPlayStatus = (SPIT_Message::ReportPlayStatus *)p_SPITMessage->getOPPart(); - parseReportPlayStatus(o_ReportPlayStatus); - } else { + case SPIT_Message::ReportSPITType::OPFLAG: + parseReportSPITType(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::RemoveSPITType::OPFLAG: + parseRemoveSPITType(p_SPITMessage->getOPPartAs()); + //----- SPIT Objects ------ + break; + case SPIT_Message::ReportSPITObject::OPFLAG: + parseReportSPITObject(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::RemoveSPITObject::OPFLAG: + parseRemoveSPITObject(p_SPITMessage->getOPPartAs()); + break; + //----- Play SPIT Objects ------ + case SPIT_Message::PlaySPITStart::OPFLAG: + parsePlaySPITStart(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::PlaySPITObject::OPFLAG: + parsePlaySPITObject(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::PlaySPITEnd::OPFLAG: + parsePlaySPITEnd(p_SPITMessage->getOPPartAs()); + break; + case SPIT_Message::ReportPlayStatus::OPFLAG: + parseReportPlayStatus(p_SPITMessage->getOPPartAs()); + break; + default: ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message: Unknown Message"); } } @@ -548,21 +526,21 @@ void SPIT_Client::disconnectInternal(Connection p_Cause) { } } -void SPIT_Client::parseConnectAnswer(SPIT_Message::ConnectAnswer *p_ConnectAnswer) { +void SPIT_Client::parseConnectAnswer(SPIT_Message::ConnectAnswer &p_ConnectAnswer) { Connection intOldConnectionStatus = m_ConnectionStatus; - if (p_ConnectAnswer->getClientID() != m_ID) + if (p_ConnectAnswer.getClientID() != m_ID) return; - m_ServerID = p_ConnectAnswer->getServerID(); - m_ServerComputerName = p_ConnectAnswer->getServerComputerName(); - m_ServerName = p_ConnectAnswer->getServerName(); - m_ServerStepTime = p_ConnectAnswer->getStepTime(); + m_ServerID = p_ConnectAnswer.getServerID(); + m_ServerComputerName = p_ConnectAnswer.getServerComputerName(); + m_ServerName = p_ConnectAnswer.getServerName(); + m_ServerStepTime = p_ConnectAnswer.getStepTime(); - if (p_ConnectAnswer->getConnected() == false) { + if (p_ConnectAnswer.getConnected() == false) { disconnectInternal(Connection::NoneServer); } else { - p_ConnectAnswer->getStepTime(); + p_ConnectAnswer.getStepTime(); m_ConnectionStatus = Connection::Ok; m_DisconnectedByServer = false; ESP_LOGD(TAG, "connection established"); @@ -580,7 +558,7 @@ void SPIT_Client::parseConnectAnswer(SPIT_Message::ConnectAnswer *p_ConnectAnswe * The SPIT server was closed * @param p_Disconnect */ -void SPIT_Client::parseDisconnect(SPIT_Message::Disconnect *p_Disconnect) { +void SPIT_Client::parseDisconnect(SPIT_Message::Disconnect &p_Disconnect) { Connection intCauseDisconnect = Connection::NoneServer; /* function o_Callable = bind(&SPIT_Client::disconnectInternal, this, intCauseDisconnect); @@ -597,7 +575,7 @@ void SPIT_Client::parseDisconnect(SPIT_Message::Disconnect *p_Disconnect) { * This is used to check if the other side is still present. * @param p_Watchdog */ -void SPIT_Client::parseWatchdog(SPIT_Message::Watchdog *p_Watchdog) { +void SPIT_Client::parseWatchdog(SPIT_Message::Watchdog &p_Watchdog) { // printf("parse Watchdog \n"); SPIT_Message::WatchdogAnswer o_WatchdogAnswer; sendSPITMessage(o_WatchdogAnswer); @@ -608,7 +586,7 @@ void SPIT_Client::parseWatchdog(SPIT_Message::Watchdog *p_Watchdog) { * This is used to check if the other side is still present. * @param p_Watchdog */ -void SPIT_Client::parseWatchdogAnswer(SPIT_Message::WatchdogAnswer *p_WatchdogAnswer) { +void SPIT_Client::parseWatchdogAnswer(SPIT_Message::WatchdogAnswer &p_WatchdogAnswer) { answerWatchdog(); ; // is also done by parseSPIT_Message } @@ -629,13 +607,11 @@ void SPIT_Client::eventWatchdogLost() { } //----- SPIT Project ------ -void SPIT_Client::parseReportSPITProject(SPIT_Message::ReportSPITProject *p_ReportSPITProject) { +void SPIT_Client::parseReportSPITProject(SPIT_Message::ReportSPITProject &p_ReportSPITProject) { // printf("parse ReportSPITProject \n"); - if (p_ReportSPITProject == nullptr) - return; - m_ServerProjectID = p_ReportSPITProject->getProjectID(); - m_ServerProjectName = p_ReportSPITProject->getProjectName(); - m_ServerFramesPerSecond = p_ReportSPITProject->getFramesPerSecond(); + m_ServerProjectID = p_ReportSPITProject.getProjectID(); + m_ServerProjectName = p_ReportSPITProject.getProjectName(); + m_ServerFramesPerSecond = p_ReportSPITProject.getFramesPerSecond(); mCallbacks.onProjectUpdate(ProjUpdate::ServerLoaded, m_ServerProjectID); // Set all SPITTypes and SPITObjects confirmed = false @@ -656,12 +632,10 @@ void SPIT_Client::parseReportSPITProject(SPIT_Message::ReportSPITProject *p_Repo ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportSPITProject"); } } -void SPIT_Client::parseCloseSPITProject(SPIT_Message::CloseSPITProject *p_CloseSPITProject) { +void SPIT_Client::parseCloseSPITProject(SPIT_Message::CloseSPITProject &p_CloseSPITProject) { // printf("parse CloseSPITProject \n"); - if (p_CloseSPITProject == nullptr) - return; string stringProjectID; - mCallbacks.onProjectUpdate(ProjUpdate::ServerClosed, p_CloseSPITProject->getProjectID()); + mCallbacks.onProjectUpdate(ProjUpdate::ServerClosed, p_CloseSPITProject.getProjectID()); SPITPlayer::clearPlayers(); } @@ -669,7 +643,7 @@ string SPIT_Client::getServerProjectID() { return m_ServerProjectID; } string SPIT_Client::getServerProjectName() { return m_ServerProjectName; } int SPIT_Client::getServerFramesPerSecond() { return m_ServerFramesPerSecond; } -void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransfer *p_RequestProjectTransfer) { +void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransfer &p_RequestProjectTransfer) { // printf("parse RequestProjectTransfer \n"); // StartProjectTransfer SPIT_Message::StartProjectTransfer sMStartProjectTransfer; @@ -828,10 +802,10 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) { // //Send act } -void SPIT_Client::parseStartProjectTransfer(SPIT_Message::StartProjectTransfer *p_StartProjectTransfer) { +void SPIT_Client::parseStartProjectTransfer(SPIT_Message::StartProjectTransfer &p_StartProjectTransfer) { mCallbacks.onProjectUpdate(ProjUpdate::StartTransfer, m_ServerProjectID); } -void SPIT_Client::parseEndProjectTransfer(SPIT_Message::EndProjectTransfer *p_EndProjectTransfer) { +void SPIT_Client::parseEndProjectTransfer(SPIT_Message::EndProjectTransfer &p_EndProjectTransfer) { SPITObject::clearUnconfirmedSPITObjects(mSpitObjects); mCallbacks.onProjectUpdate(ProjUpdate::EndTransfer, m_ServerProjectID); @@ -844,36 +818,34 @@ void SPIT_Client::parseEndProjectTransfer(SPIT_Message::EndProjectTransfer *p_En } //----- SPIT Types ------ -void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType *p_ReportSPITType) { - // printf("parse ReportSPITType ID %s Name %s \n",p_ReportSPITType->getID(), p_ReportSPITType->getName()); - if (p_ReportSPITType == nullptr) - return; +void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType &p_ReportSPITType) { + // printf("parse ReportSPITType ID %s Name %s \n",p_ReportSPITType.getID(), p_ReportSPITType.getName()); SPITType *ptrSPITType; bool boolNew = false; bool boolChanged = false; { - if (p_ReportSPITType->getServerRemote() == false) { - ptrSPITType = mSpitTypes.getEntry(p_ReportSPITType->getID()); + if (p_ReportSPITType.getServerRemote() == false) { + ptrSPITType = mSpitTypes.getEntry(p_ReportSPITType.getID()); if (ptrSPITType == nullptr) { // The user's app my veto the SPITType - if (mCallbacks.onCheckSpitTypeVeto(p_ReportSPITType) == false) { + if (mCallbacks.onCheckSpitTypeVeto(&p_ReportSPITType) == false) { return; } - auto spitType = make_unique(p_ReportSPITType->getID()); + auto spitType = make_unique(p_ReportSPITType.getID()); ptrSPITType = spitType.get(); mSpitTypes.addEntry(move(spitType)); boolNew = true; } } else { - ptrSPITType = mRemoteSpitTypes.getEntry(p_ReportSPITType->getID()); + ptrSPITType = mRemoteSpitTypes.getEntry(p_ReportSPITType.getID()); if (ptrSPITType == nullptr) { - auto spitType = make_unique(p_ReportSPITType->getID()); + auto spitType = make_unique(p_ReportSPITType.getID()); ptrSPITType = spitType.get(); mRemoteSpitTypes.addEntry(move(spitType)); boolNew = true; } } - if (!ptrSPITType->setMessageOP(*p_ReportSPITType)) { + if (!ptrSPITType->setMessageOP(p_ReportSPITType)) { // SPITType is not changable -> send back to the server sendSPITTypeInternal(*ptrSPITType); return; @@ -890,13 +862,10 @@ void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType *p_ReportSPIT } } } -void SPIT_Client::parseRemoveSPITType(SPIT_Message::RemoveSPITType *p_RemoveSPITType) { - // printf("parse RemoveSPITType %s\n", p_RemoveSPITType->getID()); - if (!p_RemoveSPITType) { - return; - } +void SPIT_Client::parseRemoveSPITType(SPIT_Message::RemoveSPITType &p_RemoveSPITType) { + // printf("parse RemoveSPITType %s\n", p_RemoveSPITType.getID()); bool boolRemote = false; - string stringSPITTypeID = p_RemoveSPITType->getID(); + string stringSPITTypeID = p_RemoveSPITType.getID(); SPITType *ptrSPITType = mRemoteSpitTypes.getEntry(stringSPITTypeID); if (!ptrSPITType) { @@ -1018,21 +987,19 @@ SPITType *SPIT_Client::createSPITType(string p_ID, string p_GroupName, string p_ } //----- SPIT Objects ------ -void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject *p_ReportSPITObject) { - ESP_LOGD(TAG, "parse ReportSPITObject %s\n", p_ReportSPITObject->getID().c_str()); - if (p_ReportSPITObject == nullptr) - return; +void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject &p_ReportSPITObject) { + ESP_LOGD(TAG, "parse ReportSPITObject %s\n", p_ReportSPITObject.getID().c_str()); SPITObject *ptrSPITObject; SPITType *ptrSPITType; bool boolNew = false; bool boolRemote = false; bool boolChanged = false; { - ESP_LOGD(TAG, "parseReportSPITObject %s / %s", p_ReportSPITObject->getID().c_str(), p_ReportSPITObject->getName().c_str()); - if (p_ReportSPITObject->getServerRemote() == false) { + ESP_LOGD(TAG, "parseReportSPITObject %s / %s", p_ReportSPITObject.getID().c_str(), p_ReportSPITObject.getName().c_str()); + if (p_ReportSPITObject.getServerRemote() == false) { boolRemote = false; - ptrSPITObject = mSpitObjects.getEntry(p_ReportSPITObject->getID()); - ptrSPITType = mSpitTypes.getEntry(p_ReportSPITObject->getSPITTypeID()); + ptrSPITObject = mSpitObjects.getEntry(p_ReportSPITObject.getID()); + ptrSPITType = mSpitTypes.getEntry(p_ReportSPITObject.getSPITTypeID()); if (ptrSPITType == nullptr) { // No associated SPITType found @@ -1045,40 +1012,40 @@ void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject *p_Report } if (ptrSPITObject == nullptr) { // The user's app my veto the SPITType - if (mCallbacks.onCheckSpitObjectVeto(p_ReportSPITObject) == false) { - ESP_LOGD(TAG, "ObjectVeto %s / %s", p_ReportSPITObject->getID().c_str(), p_ReportSPITObject->getName().c_str()); + if (mCallbacks.onCheckSpitObjectVeto(&p_ReportSPITObject) == false) { + ESP_LOGD(TAG, "ObjectVeto %s / %s", p_ReportSPITObject.getID().c_str(), p_ReportSPITObject.getName().c_str()); return; } - auto spitObj = make_unique(p_ReportSPITObject->getID()); + auto spitObj = make_unique(p_ReportSPITObject.getID()); ptrSPITObject = spitObj.get(); mSpitObjects.addEntry(move(spitObj)); boolNew = true; } else { // The user's app my veto the SPITType - if (mCallbacks.onCheckSpitObjectVeto(p_ReportSPITObject) == false) { + if (mCallbacks.onCheckSpitObjectVeto(&p_ReportSPITObject) == false) { // SpitObject exists and User APp denied the SPITObject -> remove the SPITObject without sending a message mSpitObjects.removeEntry(*ptrSPITObject); - ESP_LOGD(TAG, "TypeVeto %s / %s", p_ReportSPITObject->getID().c_str(), p_ReportSPITObject->getName().c_str()); + ESP_LOGD(TAG, "TypeVeto %s / %s", p_ReportSPITObject.getID().c_str(), p_ReportSPITObject.getName().c_str()); return; } } } else { boolRemote = true; - ptrSPITObject = mRemoteSpitObjects.getEntry(p_ReportSPITObject->getID()); - ptrSPITType = mRemoteSpitTypes.getEntry(p_ReportSPITObject->getSPITTypeID()); + ptrSPITObject = mRemoteSpitObjects.getEntry(p_ReportSPITObject.getID()); + ptrSPITType = mRemoteSpitTypes.getEntry(p_ReportSPITObject.getSPITTypeID()); if (ptrSPITType == nullptr) { // No associated SPITType found return; } if (ptrSPITObject == nullptr) { - auto spitObj = make_unique(p_ReportSPITObject->getID()); + auto spitObj = make_unique(p_ReportSPITObject.getID()); ptrSPITObject = spitObj.get(); mRemoteSpitObjects.addEntry(move(spitObj)); boolNew = true; } } - if (!ptrSPITObject->setMessageOP(p_ReportSPITObject)) { + if (!ptrSPITObject->setMessageOP(&p_ReportSPITObject)) { ESP_LOGE(TAG, "Change not allowed"); // setMessageOP error - the SPITObject can't be changed, it may be fixed and crated by this client sendSPITObjectInternal(ptrSPITObject); @@ -1099,13 +1066,9 @@ void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject *p_Report } } } -void SPIT_Client::parseRemoveSPITObject(SPIT_Message::RemoveSPITObject *p_RemoveSPITObject) { - // printf("parse RemoveSPITObject %s\n", p_RemoveSPITObject->getID()); - if (!p_RemoveSPITObject) { - return; - } - - SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_RemoveSPITObject->getID()); +void SPIT_Client::parseRemoveSPITObject(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject) { + // printf("parse RemoveSPITObject %s\n", p_RemoveSPITObject.getID()); + SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_RemoveSPITObject.getID()); if (ptrSPITObject != nullptr) { SPITType *ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->getSPITTypeID()); if (ptrSPITType != nullptr) { @@ -1114,7 +1077,7 @@ void SPIT_Client::parseRemoveSPITObject(SPIT_Message::RemoveSPITObject *p_Remove mRemoteSpitObjects.removeEntry(*ptrSPITObject); } else { // call removeSPITObject, this will notify the server that the object is removed - removeSPITObject(p_RemoveSPITObject->getID()); + removeSPITObject(p_RemoveSPITObject.getID()); } } @@ -1203,21 +1166,21 @@ int SPIT_Client::removeSPITObject(string p_SPITObjectID) { //----- Play SPIT Objects ------ -void SPIT_Client::parsePlaySPITStart(SPIT_Message::PlaySPITStart *p_PlaySPITStart) { - ESP_LOGD(TAG, "parse PlaySPITStart ID: %s Name: %s Running: %d", p_PlaySPITStart->getPlayerID().c_str(), p_PlaySPITStart->getPlayerName().c_str(), (int)p_PlaySPITStart->getPlayerIsRunning()); - SPITPlayer &spitPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITStart->getPlayerID()); - spitPlayer.setIsRunning(p_PlaySPITStart->getPlayerIsRunning()); - spitPlayer.setName(p_PlaySPITStart->getPlayerName()); - spitPlayer.setType(p_PlaySPITStart->getPlayerType()); - spitPlayer.setTime(p_PlaySPITStart->getTime()); +void SPIT_Client::parsePlaySPITStart(SPIT_Message::PlaySPITStart &p_PlaySPITStart) { + ESP_LOGD(TAG, "parse PlaySPITStart ID: %s Name: %s Running: %d", p_PlaySPITStart.getPlayerID().c_str(), p_PlaySPITStart.getPlayerName().c_str(), (int)p_PlaySPITStart.getPlayerIsRunning()); + SPITPlayer &spitPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITStart.getPlayerID()); + spitPlayer.setIsRunning(p_PlaySPITStart.getPlayerIsRunning()); + spitPlayer.setName(p_PlaySPITStart.getPlayerName()); + spitPlayer.setType(p_PlaySPITStart.getPlayerType()); + spitPlayer.setTime(p_PlaySPITStart.getTime()); spitPlayer.startPlaySequence(); mCallbacks.onPlay(spitPlayer.getID(), spitPlayer.getName(), spitPlayer.getType(), spitPlayer.getIsRunning(), spitPlayer.getTime()); } -void SPIT_Client::parsePlaySPITObject(SPIT_Message::PlaySPITObject *p_PlaySPITObject) { +void SPIT_Client::parsePlaySPITObject(SPIT_Message::PlaySPITObject &p_PlaySPITObject) { - SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITObject->getPlayerID()); - SPITObject *ptrSPITObject = mSpitObjects.getEntry(p_PlaySPITObject->getSPITObjectID()); + SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITObject.getPlayerID()); + SPITObject *ptrSPITObject = mSpitObjects.getEntry(p_PlaySPITObject.getSPITObjectID()); if (ptrSPITObject == nullptr) { return; @@ -1227,11 +1190,11 @@ void SPIT_Client::parsePlaySPITObject(SPIT_Message::PlaySPITObject *p_PlaySPITOb return; } ptrPlaySPITType->setPlayerIsRunning(ptrSPITPlayer.getIsRunning()); - ptrPlaySPITType->addValue(((double)p_PlaySPITObject->getValue() / 1000000), ((double)ptrSPITObject->getValueFactor() / 1000000)); + ptrPlaySPITType->addValue(((double)p_PlaySPITObject.getValue() / 1000000), ((double)ptrSPITObject->getValueFactor() / 1000000)); } -void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd *p_PlaySPITEnd) { - SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITEnd->getPlayerID()); +void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd &p_PlaySPITEnd) { + SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITEnd.getPlayerID()); // unordered_map* ptrPlayObjects; // bool boolStarted; // bool boolStopped; @@ -1280,12 +1243,12 @@ void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd *p_PlaySPITEnd) { ptrSPITPlayer.endPlaySequence(); } -void SPIT_Client::parseReportPlayStatus(SPIT_Message::ReportPlayStatus *p_ReportPlayStatus) { +void SPIT_Client::parseReportPlayStatus(SPIT_Message::ReportPlayStatus &p_ReportPlayStatus) { SPITType *ptrSPITType = NULL; - SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_ReportPlayStatus->getID()); + SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_ReportPlayStatus.getID()); if (ptrSPITObject == nullptr) { - ptrSPITObject = mSpitObjects.getEntry(p_ReportPlayStatus->getID()); + ptrSPITObject = mSpitObjects.getEntry(p_ReportPlayStatus.getID()); if (ptrSPITObject == nullptr) { return; } @@ -1299,7 +1262,7 @@ void SPIT_Client::parseReportPlayStatus(SPIT_Message::ReportPlayStatus *p_Report if (ptrSPITType == nullptr) { return; } - mCallbacks.onPlayRemoteObjectStatus(*ptrSPITType, *ptrSPITObject, p_ReportPlayStatus->getFrameInsideObject(), p_ReportPlayStatus->getValue()); + mCallbacks.onPlayRemoteObjectStatus(*ptrSPITType, *ptrSPITObject, p_ReportPlayStatus.getFrameInsideObject(), p_ReportPlayStatus.getValue()); } //--------- Remote ---------- @@ -1319,26 +1282,25 @@ void SPIT_Client::parseReportPlayStatus(SPIT_Message::ReportPlayStatus *p_Report * VALUEFLAG_DECREASE (0x01) The server decreases his existing value by p_Valueppm */ void SPIT_Client::sendRemoteObject(string p_SPITObjectID, int p_Valueppm, char p_ValueFlag) { - SPITObject *ptrRemoteSPITObject = mRemoteSpitObjects.getEntry(p_SPITObjectID); - if (ptrRemoteSPITObject == nullptr) - return; + SPITObject *ptrRemoteSPITObject = mRemoteSpitObjects.getEntry(p_SPITObjectID); + if (ptrRemoteSPITObject == nullptr) + return; - SPIT_Message::PlaySPITStart playSPITStart(m_ID, m_ProjName, PLAYERTYPE_DISCRETE); - playSPITStart.setPlayerIsRunning(false); - playSPITStart.setTime(0); - sendSPITMessage(playSPITStart); + SPIT_Message::PlaySPITStart playSPITStart(m_ID, m_ProjName, PLAYERTYPE_DISCRETE); + playSPITStart.setPlayerIsRunning(false); + playSPITStart.setTime(0); + sendSPITMessage(playSPITStart); - SPIT_Message::PlaySPITObject playSPITObject; - playSPITObject.setID(ptrRemoteSPITObject->getID()); - playSPITObject.setPlayPrePosition(false); - playSPITObject.setPlayerID(m_ID); - playSPITObject.setValue(p_Valueppm); - playSPITObject.setValueFlag(p_ValueFlag); - sendSPITMessage(playSPITObject); + SPIT_Message::PlaySPITObject playSPITObject; + playSPITObject.setID(ptrRemoteSPITObject->getID()); + playSPITObject.setPlayPrePosition(false); + playSPITObject.setPlayerID(m_ID); + playSPITObject.setValue(p_Valueppm); + playSPITObject.setValueFlag(p_ValueFlag); + sendSPITMessage(playSPITObject); - SPIT_Message::PlaySPITEnd playSPITEnd(m_ID); - sendSPITMessage(playSPITEnd); - + SPIT_Message::PlaySPITEnd playSPITEnd(m_ID); + sendSPITMessage(playSPITEnd); } fos::Semaphore SPIT_Client::sStartSad;