diff --git a/.gitignore b/.gitignore index 30d388a..2da1b12 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -build* \ No newline at end of file +build* +.build* \ No newline at end of file diff --git a/components/spit/include/SPITObject.h b/components/spit/include/SPITObject.h index ba2931c..09c32af 100644 --- a/components/spit/include/SPITObject.h +++ b/components/spit/include/SPITObject.h @@ -15,10 +15,11 @@ #define SPITOBJECT_H #include "SPITType.h" -#include "SPIT_Message.h" +#include "spit_message.hpp" #include "SpitRepo.hpp" using namespace std; +using namespace spit; class SPITObjectListener; @@ -138,9 +139,9 @@ class SPITObject { bool setDelay(long long p_Delay); bool setDuration(long long p_Duration); - bool setMessageOP(SPIT_Message::ReportSPITObject *p_ReportSPITObject); - void fillMessageOP(SPIT_Message::ReportSPITObject &p_ReportSPITObject); - void fillMessageOP(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject); + bool setMessageOP(Message::ReportObject *p_ReportSPITObject); + void fillMessageOP(Message::ReportObject &p_ReportSPITObject); + void fillMessageOP(Message::RemoveObject &p_RemoveSPITObject); }; #endif /* SPITOBJECT_H */ diff --git a/components/spit/include/SPITType.h b/components/spit/include/SPITType.h index 7248402..5870097 100644 --- a/components/spit/include/SPITType.h +++ b/components/spit/include/SPITType.h @@ -15,10 +15,11 @@ #define SPITTYPE_H #include "SPITSocket.h" -#include "SPIT_Message.h" +#include "spit_message.hpp" #include "SpitRepo.hpp" using namespace std; +using namespace spit; class SPITTypeListener; @@ -96,9 +97,9 @@ class SPITType { */ bool setActionAssigned(bool p_ActionAssigned); - bool setMessageOP(SPIT_Message::ReportSPITType &reportSpitType); - void fillMessageOP(SPIT_Message::ReportSPITType &smReportSpitType) const; - void fillMessageOP(SPIT_Message::RemoveSPITType &smRemoveSpitType) const; + bool setMessageOP(Message::ReportType &reportSpitType); + void fillMessageOP(Message::ReportType &smReportSpitType) const; + void fillMessageOP(Message::RemoveType &smRemoveSpitType) const; }; #endif /* SPITTYPE_H */ \ No newline at end of file diff --git a/components/spit/include/SPIT_Client.h b/components/spit/include/SPIT_Client.h index 33ec376..4a66edb 100644 --- a/components/spit/include/SPIT_Client.h +++ b/components/spit/include/SPIT_Client.h @@ -19,12 +19,13 @@ #include "SPITPlayer.h" #include "SPITSocket.h" #include "SPITType.h" -#include "SPIT_Message.h" +#include "spit_message.hpp" #include "SpitRepo.hpp" #include #include using namespace std; +using namespace spit; class SPIT_Client : I_SAD_Client { @@ -112,7 +113,7 @@ class SPIT_Client : I_SAD_Client { uint8_t m_MessageNumber_Send{1}; int m_MessageNumber_Received{-1}; // set to -1 because the first received message will set the number (1..255) - vector> m_OvertakingSPIT_Messages; + vector> m_OvertakingSPIT_Messages; // Server's info filled by parseConnectAnswer string m_ServerID{}; @@ -173,7 +174,7 @@ class SPIT_Client : I_SAD_Client { // Reconnect to the server when connection is lost see eventConnectionStatus and eventServerDetected bool _doReconnect{}; // true = on eventServerDetected connect to the server identified by m_ServerID public: - int sendSPITMessage(SPIT_Message::OPPart & spitMessageOPPart); + int sendSPITMessage(Message::OPPart & spitMessageOPPart); //--------------- ServerAutoDetection SAD --------------- public: @@ -209,13 +210,13 @@ class SPIT_Client : I_SAD_Client { private: void disconnectInternal(Connection p_Cause); void resetMessageNumberReceived(); - 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 parseSPIT_Message(unique_ptr p_SPITMessage); + void checkParseSPIT_Message(unique_ptr p_SPITMessage); + void addOvertakingSPIT_Message(unique_ptr p_SPIT_Message); + void parseConnectAnswer(Message::ConnectAnswer &p_ConnectAnswer); + void parseDisconnect(Message::Disconnect &p_Disconnect); + void parseWatchdog(Message::Watchdog &p_Watchdog); + void parseWatchdogAnswer(Message::WatchdogAnswer &p_WatchdogAnswer); public: /** Used internally*/ @@ -224,8 +225,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(Message::ReportProject &p_ReportSPITProject); + void parseCloseSPITProject(Message::CloseProject &p_CloseSPITProject); public: /** Returns the SPITServer's project ID - may be the same as the project's name*/ @@ -236,9 +237,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(Message::RequestProjectTransfer &p_RequestProjectTransfer); + void parseStartProjectTransfer(Message::StartProjectTransfer &p_StartProjectTransfer); + void parseEndProjectTransfer(Message::EndProjectTransfer &p_EndProjectTransfer); public: static void sendProject(SPIT_Client *p_PtrSPIT_Client); @@ -274,8 +275,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(Message::ReportType &p_ReportSPITType); + void parseRemoveSPITType(Message::RemoveType &p_RemoveSPITType); int sendSPITTypeInternal(SPITType &p_SPITType); public: @@ -297,8 +298,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(Message::ReportObject &p_ReportSPITObject); + void parseRemoveSPITObject(Message::RemoveObject &p_RemoveSPITObject); int sendSPITObjectInternal(SPITObject *ptrSPITObject); public: @@ -320,10 +321,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(Message::PlayStart &p_PlaySPITStart); + void parsePlaySPITObject(Message::PlayObject &p_PlaySPITObject); + void parsePlaySPITEnd(Message::PlayEnd &p_PlaySPITEnd); + void parseReportPlayStatus(Message::ReportPlayStatus &p_ReportPlayStatus); public: //--------- Remote ---------- diff --git a/components/spit/include/SPIT_Message.h b/components/spit/include/spit_message.hpp similarity index 75% rename from components/spit/include/SPIT_Message.h rename to components/spit/include/spit_message.hpp index 360984d..7b1e20d 100644 --- a/components/spit/include/SPIT_Message.h +++ b/components/spit/include/spit_message.hpp @@ -5,14 +5,12 @@ */ /* - * File: SPIT_Message.h + * File: Message.h * Author: Hagi * * Created on 3. April 2019, 08:51 */ - -#ifndef SPIT_MESSAGE_H -#define SPIT_MESSAGE_H +#pragma once #include #include @@ -23,7 +21,9 @@ using namespace std; static const string SPITID = "#spit#"; -class SPIT_Message { +namespace spit { + +class Message { //----------- Header ----------- public: class Header { @@ -33,85 +33,86 @@ class SPIT_Message { Header(); private: - string m_SPITID; - int m_SPITVersion{SPITVERSION}; - unsigned char m_MessageNumber{}; - int m_BytesCount{BYTESLENGTH}; - string m_ServerID{}; - string m_ClientID{}; - int m_OPFlag{-1}; - int m_ParseOffset{}; + string mID; + int mVersion{SPITVERSION}; + unsigned char mMessageNumber{}; + int mBytesCount{BYTESLENGTH}; + string mServerID{}; + string mClientID{}; + int mOpFlag{-1}; + int mParseOffset{}; public: - string getSPITID() const { return m_SPITID; } - int getSPITVersion() const { return m_SPITVersion; } - unsigned char getMessageNumber() const { return m_MessageNumber; } - int getBytesCount() const { return m_BytesCount; } - string getServerID() const { return m_ServerID; } - string getClientID() const { return m_ClientID; } - int getOPFlag() const { return m_OPFlag; } + string getSPITID() const { return mID; } + int getSPITVersion() const { return mVersion; } + unsigned char getMessageNumber() const { return mMessageNumber; } + int getBytesCount() const { return mBytesCount; } + string getServerID() const { return mServerID; } + string getClientID() const { return mClientID; } + int getType() const { return mOpFlag; } // Receive bool parse(const std::vector &message); // Send - Header(int p_SPITVersion, int p_OPFlag); - void setMessageNumber(unsigned char p_MessageNumber) { m_MessageNumber = p_MessageNumber; } - void setServerID(string p_ID) { m_ServerID = p_ID; } - void setClientID(string p_ID) { m_ClientID = p_ID; } - void setOPFlag(int p_OPFlag) { m_OPFlag = p_OPFlag; } + Header(int p_SPITVersion, int pOpFlag); + void setMessageNumber(unsigned char p_MessageNumber) { mMessageNumber = p_MessageNumber; } + void setServerID(string p_ID) { mServerID = p_ID; } + void setClientID(string p_ID) { mClientID = p_ID; } + void setOPFlag(int pOpFlag) { mOpFlag = pOpFlag; } bool fillBytes(std::vector &message); }; //----------- OPPart ----------- public: class OPPart { - // Members protected: - unique_ptr
m_Header{}; - int m_ParseOffset{}; - int m_BytesCount; + unique_ptr
mHeader{}; + int mParseOffset{}; + int mBytesCount; public: virtual ~OPPart(); - Header *getHeader() const { return m_Header.get(); } - int getBytesCount() const { return m_BytesCount; } + Header *getHeader() const { return mHeader.get(); } + int getBytesCount() const { return mBytesCount; } void setServerInfoInHeader(string clientId, string serverId) { - if (!m_Header) + if (!mHeader) { return; - m_Header->setClientID(clientId); - m_Header->setServerID(serverId); + } + mHeader->setClientID(clientId); + mHeader->setServerID(serverId); } void setMessageNumber(uint8_t no) { - if (!m_Header) + if (!mHeader) { return; - m_Header->setMessageNumber(no); + } + mHeader->setMessageNumber(no); } const string getServerID() const { - if (!m_Header) { + if (!mHeader) { return ""; } - return m_Header->getServerID(); + return mHeader->getServerID(); } const string getClientID() const { - if (!m_Header) { + if (!mHeader) { return ""; } - return m_Header->getClientID(); + return mHeader->getClientID(); } - int getOPFlag() const { - if (!m_Header) { + int getType() const { + if (!mHeader) { return -1; } - return m_Header->getOPFlag(); + return mHeader->getType(); } // Receive - OPPart(unique_ptr
p_Header, int p_OPFlag, int size); + OPPart(unique_ptr
p_Header, int pOpFlag, int size); void setHeader(int opFlag); virtual bool parse(const std::vector &message) = 0; @@ -120,7 +121,7 @@ class SPIT_Message { virtual bool fillBytes(std::vector &message) = 0; }; - //----------- SPIT_Message ----------- + //----------- Message ----------- public: static constexpr int SPITVERSION = 1; @@ -140,7 +141,7 @@ class SPIT_Message { static constexpr char VALUEFLAG_INCREASE = 0x01; // increase the value static constexpr char VALUEFLAG_DECREASE = 0x02; // decrease the value - SPIT_Message() = default; + Message() = default; // Members private: @@ -148,18 +149,18 @@ class SPIT_Message { // Receive public: - SPIT_Message(std::vector message); + Message(std::vector message); const Header *getHeader() const { return m_OPPart->getHeader(); } - int getOPFlag() const { + int getType() const { if (!m_OPPart || !m_OPPart->getHeader()) { return -1; } - return m_OPPart->getHeader()->getOPFlag(); + return m_OPPart->getHeader()->getType(); } const OPPart *getOPPart() const { return m_OPPart.get(); } template - T &getOPPartAs() const { return *reinterpret_cast(m_OPPart.get()); } + T &getAs() const { return *reinterpret_cast(m_OPPart.get()); } private: bool parse(std::vector message); @@ -294,9 +295,9 @@ class SPIT_Message { //------------------------------ SPITProject ---------------------------------- - //----------- ReportSPITProject ----------- + //----------- ReportProject ----------- - class ReportSPITProject : public OPPart { + class ReportProject : public OPPart { public: static constexpr int OPFLAG = 11; static constexpr int BYTESLENGTH = 113; @@ -308,22 +309,22 @@ class SPIT_Message { // Receive public: - ReportSPITProject(const ReportSPITProject &orig); - ReportSPITProject(unique_ptr
p_Header); + ReportProject(const ReportProject &orig); + ReportProject(unique_ptr
p_Header); bool parse(const std::vector &message); const string getProjectID() const { return m_ProjectID; } const string getProjectName() const { return m_ProjectName; } int getFramesPerSecond() const { return m_FramesPerSecond; } // Send - ReportSPITProject(string p_ProjectID, string p_ProjectName); + ReportProject(string p_ProjectID, string p_ProjectName); void setFramesPerSecond(const int p_FramesPerSecond) { m_FramesPerSecond = p_FramesPerSecond; } bool fillBytes(std::vector &message); }; - //----------- CloseSPITProject ----------- + //----------- CloseProject ----------- - class CloseSPITProject : public OPPart { + class CloseProject : public OPPart { public: static constexpr int OPFLAG = 13; static constexpr int BYTESLENGTH = 45; @@ -332,15 +333,15 @@ class SPIT_Message { string m_ProjectID{}; public: - CloseSPITProject(const CloseSPITProject &orig); + CloseProject(const CloseProject &orig); // Receive - CloseSPITProject(unique_ptr
p_Header); + CloseProject(unique_ptr
p_Header); bool parse(const std::vector &message); const string getProjectID() const { return m_ProjectID; } // Send - CloseSPITProject(string projectID); + CloseProject(string projectID); bool fillBytes(std::vector &message); }; @@ -392,8 +393,8 @@ class SPIT_Message { //---------------------------- SPIT_Types ---------------------------------- - //----------- ReportSPITType ----------- - class ReportSPITType : public OPPart { + //----------- ReportType ----------- + class ReportType : public OPPart { public: static constexpr int OPFLAG = 21; static constexpr int BYTESLENGTH = 168; @@ -406,13 +407,13 @@ class SPIT_Message { bool m_ServerProjectIndepended{}; string m_SPITTypeGroupName{}; string m_SPITTypeName{}; - long long m_Delay{}; - long long m_Duration{}; + uint64_t m_Delay{}; + uint64_t m_Duration{}; public: - ReportSPITType(const ReportSPITType &orig); + ReportType(const ReportType &orig); // Receive - ReportSPITType(unique_ptr
p_Header); + ReportType(unique_ptr
p_Header); bool parse(const std::vector &message); bool getConfirmed() const { return m_Confirmed; } @@ -422,11 +423,11 @@ class SPIT_Message { bool getServerProjectIndepended() const { return m_ServerProjectIndepended; } const string getGroupName() const { return m_SPITTypeGroupName; } const string getName() const { return m_SPITTypeName; } - long long getDelay() const { return m_Delay; } - long long getDuration() const { return m_Duration; } + uint64_t getDelay() const { return m_Delay; } + uint64_t getDuration() const { return m_Duration; } // Send - ReportSPITType(); + ReportType(); void setConfirmed(bool p_Confirmed) { m_Confirmed = p_Confirmed; } void setID(string p_ID) { m_SPITTypeID = p_ID; } void setFixed(bool p_Fixed) { m_Fixed = p_Fixed; } @@ -434,15 +435,15 @@ class SPIT_Message { void setServerProjectIndepended(bool p_ProjectIndpended) { m_ServerProjectIndepended = p_ProjectIndpended; } void setGroupName(string p_GroupName) { m_SPITTypeGroupName = p_GroupName; } void setName(string p_Name) { m_SPITTypeName = p_Name; } - void setDelay(long long p_Delay) { m_Delay = p_Delay; } - void setDuration(long long p_Duration) { m_Duration = p_Duration; } + void setDelay(uint64_t p_Delay) { m_Delay = p_Delay; } + void setDuration(uint64_t p_Duration) { m_Duration = p_Duration; } bool fillBytes(std::vector &message); }; - //----------- RemoveSPITType ----------- + //----------- RemoveType ----------- - class RemoveSPITType : public OPPart { + class RemoveType : public OPPart { public: static constexpr int OPFLAG = 23; static constexpr int BYTESLENGTH = 45; @@ -451,24 +452,24 @@ class SPIT_Message { string m_SPITTypeID{}; public: - RemoveSPITType(const RemoveSPITType &orig); + RemoveType(const RemoveType &orig); // Receive - RemoveSPITType(unique_ptr
p_Header); + RemoveType(unique_ptr
p_Header); bool parse(const std::vector &message); const string getID() const { return m_SPITTypeID; } // Send - RemoveSPITType(); + RemoveType(); void setID(string p_ID) { m_SPITTypeID = p_ID; } bool fillBytes(std::vector &message); }; //---------------------------- SPITObjects ---------------------------------- - //----------- ReportSPITObject ----------- + //----------- ReportObject ----------- - class ReportSPITObject : public OPPart { + class ReportObject : public OPPart { public: static constexpr int OPFLAG = 31; static constexpr int BYTESLENGTH = 339; @@ -481,22 +482,22 @@ class SPIT_Message { string m_SPITObjectName{}; string m_SPITTypeID{}; string m_ServerParams{}; - long long m_FrameStart{}; - long long m_FrameLength{}; - long long m_FrameFadeInLength{}; - long long m_FrameFadeOutLength{}; + uint64_t m_FrameStart{}; + uint64_t m_FrameLength{}; + uint64_t m_FrameFadeInLength{}; + uint64_t m_FrameFadeOutLength{}; int m_ValueFactor{}; char m_ValueUse{VALUEUSE_DISCARD}; int m_Track{}; string m_Remark{}; - long long m_Delay{}; - long long m_Duration{}; + uint64_t m_Delay{}; + uint64_t m_Duration{}; bool m_ActionAssigned{}; public: - ReportSPITObject(const ReportSPITObject &orig); + ReportObject(const ReportObject &orig); // Receive - ReportSPITObject(unique_ptr
p_Header); + ReportObject(unique_ptr
p_Header); bool parse(const std::vector &message); bool getConfirmed() const { return m_Confirmed; } @@ -506,20 +507,20 @@ class SPIT_Message { const string getName() const { return m_SPITObjectName; } const string getSPITTypeID() const { return m_SPITTypeID; } const string getServerParams() const { return m_ServerParams; } - long long getFrameStart() const { return m_FrameStart; } - long long getFrameLength() const { return m_FrameLength; } - long long getFrameFadeInLength() const { return m_FrameFadeInLength; } - long long getFrameFadeOutLength() const { return m_FrameFadeOutLength; } + uint64_t getFrameStart() const { return m_FrameStart; } + uint64_t getFrameLength() const { return m_FrameLength; } + uint64_t getFrameFadeInLength() const { return m_FrameFadeInLength; } + uint64_t getFrameFadeOutLength() const { return m_FrameFadeOutLength; } int getValueFactor() const { return m_ValueFactor; } char getValueUse() const { return m_ValueUse; } int getTrack() const { return m_Track; } const string getRemark() const { return m_Remark; } - long long getDelay() const { return m_Delay; } - long long getDuration() const { return m_Duration; } + uint64_t getDelay() const { return m_Delay; } + uint64_t getDuration() const { return m_Duration; } bool getActionAssigned() const { return m_ActionAssigned; } // Send public: - ReportSPITObject(); + ReportObject(); void setConfirmed(bool p_Confirmed) { m_Confirmed = p_Confirmed; }; void setID(string p_ID) { m_SPITObjectID = p_ID; }; @@ -528,23 +529,23 @@ class SPIT_Message { void setName(string p_Name) { m_SPITObjectName = p_Name; }; void setSPITTypeID(string p_ID) { m_SPITTypeID = p_ID; }; void setServerParams(string p_Parameters) { m_ServerParams = p_Parameters; }; - void setFrameStart(long long p_StartTime) { m_FrameStart = p_StartTime; }; - void setFrameLength(long long p_Length) { m_FrameLength = p_Length; }; - void setFrameFadeInLength(long long p_FadeInTime) { m_FrameFadeInLength = p_FadeInTime; }; - void setFrameFadeOutLength(long long p_FadeOutTime) { m_FrameFadeOutLength = p_FadeOutTime; }; + void setFrameStart(uint64_t p_StartTime) { m_FrameStart = p_StartTime; }; + void setFrameLength(uint64_t p_Length) { m_FrameLength = p_Length; }; + void setFrameFadeInLength(uint64_t p_FadeInTime) { m_FrameFadeInLength = p_FadeInTime; }; + void setFrameFadeOutLength(uint64_t p_FadeOutTime) { m_FrameFadeOutLength = p_FadeOutTime; }; void setValueFactor(int p_Volume) { m_ValueFactor = p_Volume; }; void setValueUse(char p_ValueUse) { m_ValueUse = p_ValueUse; }; void setTrack(int p_Track) { m_Track = p_Track; }; void setRemark(string p_Description) { m_Remark = p_Description; }; - void setDelay(long long p_Delay); - void setDuration(long long p_Duration); + void setDelay(uint64_t p_Delay); + void setDuration(uint64_t p_Duration); void setActionAssigned(bool p_ActionAssigned) { m_ActionAssigned = p_ActionAssigned; } bool fillBytes(std::vector &message); }; - //----------- RemoveSPITObject ----------- + //----------- RemoveObject ----------- - class RemoveSPITObject : public OPPart { + class RemoveObject : public OPPart { public: static constexpr int OPFLAG = 33; static constexpr int BYTESLENGTH = 45; @@ -553,24 +554,24 @@ class SPIT_Message { string m_SPITObjectID{}; public: - RemoveSPITObject(const RemoveSPITObject &orig); + RemoveObject(const RemoveObject &orig); // Receive - RemoveSPITObject(unique_ptr
p_Header); + RemoveObject(unique_ptr
p_Header); bool parse(const std::vector &message); const string getID() const { return m_SPITObjectID; } // Send public: - RemoveSPITObject(); + RemoveObject(); void setID(string p_ID) { m_SPITObjectID = p_ID; } bool fillBytes(std::vector &message); }; //---------------------------- SPITPlayer ---------------------------------- - //----------- PlaySPITStart ----------- + //----------- PlayStart ----------- - class PlaySPITStart : public OPPart { + class PlayStart : public OPPart { public: static constexpr int OPFLAG = 37; static constexpr int BYTESLENGTH = 119; @@ -580,30 +581,30 @@ class SPIT_Message { string m_PlayerName{}; char m_PlayerType{}; bool m_PlayerIsRunning{}; - long long m_Time; // Frames + uint64_t m_Time; // Frames public: - PlaySPITStart(const PlaySPITStart &orig); + PlayStart(const PlayStart &orig); // Receive - PlaySPITStart(unique_ptr
p_Header); + PlayStart(unique_ptr
p_Header); bool parse(const std::vector &message); const string getPlayerID() const { return m_PlayerID; } const string getPlayerName() const { return m_PlayerName; } char getPlayerType() const { return m_PlayerType; } bool getPlayerIsRunning() const { return m_PlayerIsRunning; } - long long getTime() const { return m_Time; } + uint64_t getTime() const { return m_Time; } // Send - PlaySPITStart(string p_PlayerID, string p_PlayerName, char p_PlayerType); + PlayStart(string p_PlayerID, string p_PlayerName, char p_PlayerType); void setPlayerIsRunning(bool p_IsPlaying) { m_PlayerIsRunning = p_IsPlaying; } - void setTime(long long p_Time) { m_Time = p_Time; } + void setTime(uint64_t p_Time) { m_Time = p_Time; } bool fillBytes(std::vector &message); }; - //----------- PlaySPITObject ----------- + //----------- PlayObject ----------- - class PlaySPITObject : public OPPart { + class PlayObject : public OPPart { public: static constexpr int OPFLAG = 38; static constexpr int BYTESLENGTH = 100; @@ -611,37 +612,37 @@ class SPIT_Message { private: string m_PlayerID{}; string m_SPITObjectID{}; - long long m_FrameInsideObject{}; // Frames + uint64_t m_FrameInsideObject{}; // Frames bool m_PlayPrePosition{}; int m_Value{}; char m_ValueFlag{VALUEFLAG_DIRECT}; public: - PlaySPITObject(const PlaySPITObject &orig); + PlayObject(const PlayObject &orig); // Receive - PlaySPITObject(unique_ptr
p_Header); + PlayObject(unique_ptr
p_Header); bool parse(const std::vector &message); const string getPlayerID() const { return m_PlayerID; } const string getSPITObjectID() const { return m_SPITObjectID; } - long long getFrameInsideObject() const { return m_FrameInsideObject; } + uint64_t getFrameInsideObject() const { return m_FrameInsideObject; } bool getPlayPrePosition() const { return m_PlayPrePosition; } int getValue() const { return m_Value; } char getValueFlag() const { return m_ValueFlag; } // Send - PlaySPITObject(); + PlayObject(); void setPlayerID(string p_PlayerID) { m_PlayerID = p_PlayerID; } void setID(string p_ID) { m_SPITObjectID = p_ID; } - void setFrameInsideObject(long long p_TimeInside) { m_FrameInsideObject = p_TimeInside; } + void setFrameInsideObject(uint64_t p_TimeInside) { m_FrameInsideObject = p_TimeInside; } void setPlayPrePosition(bool p_PlayOldPosition) { m_PlayPrePosition = p_PlayOldPosition; } void setValue(int p_Value) { m_Value = p_Value; } void setValueFlag(char p_ValueFlag) { m_ValueFlag = p_ValueFlag; } bool fillBytes(std::vector &message); }; - //----------- PlaySPITEnd ----------- - class PlaySPITEnd : public OPPart { + //----------- PlayEnd ----------- + class PlayEnd : public OPPart { public: static constexpr int OPFLAG = 39; static constexpr int BYTESLENGTH = 45; @@ -650,19 +651,18 @@ class SPIT_Message { string m_PlayerID{}; public: - PlaySPITEnd(const PlaySPITEnd &orig); + PlayEnd(const PlayEnd &orig); // Receive - PlaySPITEnd(unique_ptr
p_Header); + PlayEnd(unique_ptr
p_Header); bool parse(const std::vector &message); const string getPlayerID() const { return m_PlayerID; } // Send - PlaySPITEnd(string p_PlayerID); + PlayEnd(string p_PlayerID); bool fillBytes(std::vector &message); }; //----------- ReportPlayStatus ----------- - class ReportPlayStatus : public OPPart { public: static constexpr int OPFLAG = 40; @@ -670,7 +670,7 @@ class SPIT_Message { private: string m_SPITObjectID{}; - long long m_FrameInsideObject{}; // Frames + uint64_t m_FrameInsideObject{}; int m_Value{}; public: @@ -680,13 +680,13 @@ class SPIT_Message { bool parse(const std::vector &message); const string getID() const { return m_SPITObjectID; } - long long getFrameInsideObject() const { return m_FrameInsideObject; } + uint64_t getFrameInsideObject() const { return m_FrameInsideObject; } int getValue() const { return m_Value; } // Send ReportPlayStatus(); void setID(string p_ID); - void setFrameInsideObject(long long p_TimeInside); + void setFrameInsideObject(uint64_t p_TimeInside); void setValue(int p_Value); bool fillBytes(std::vector &message); }; @@ -695,11 +695,11 @@ class SPIT_Message { public: static bool isSystemLittleEndian(); static optional getInt(const std::vector &message, int &offset); - static optional getLong(const std::vector &message, int &offset); + static optional getLong(const std::vector &message, int &offset); static optional getBoolean(const std::vector &message, int &offset); static optional getByte(const std::vector &message, int &offset); static int setInt(int value, std::vector &message, int offset); - static int setLong(long long value, std::vector &message, int offset); + static int setLong(uint64_t value, std::vector &message, int offset); static int setBoolean(bool value, std::vector &message, int offset); static int setByte(int value, std::vector &message, int offset); @@ -725,4 +725,5 @@ class SPIT_Message { */ static int setString(string p_String, std::vector &message, int p_Offset, int p_Length); }; -#endif /* SPIT_MESSAGE_H */ + +} \ No newline at end of file diff --git a/components/spit/src/SPITObject.cpp b/components/spit/src/SPITObject.cpp index f4c246e..d07313b 100644 --- a/components/spit/src/SPITObject.cpp +++ b/components/spit/src/SPITObject.cpp @@ -59,7 +59,7 @@ SPITObject::SPITObject(string p_ID) { m_ID = p_ID; } -bool SPITObject::setMessageOP(SPIT_Message::ReportSPITObject *p_ReportSPITObject) { +bool SPITObject::setMessageOP(Message::ReportObject *p_ReportSPITObject) { bool boolChangeAllowed; bool boolChanged = false; @@ -193,7 +193,7 @@ bool SPITObject::setMessageOP(SPIT_Message::ReportSPITObject *p_ReportSPITObject return boolChanged; } -void SPITObject::fillMessageOP(SPIT_Message::ReportSPITObject &p_ReportSPITObject) { +void SPITObject::fillMessageOP(Message::ReportObject &p_ReportSPITObject) { p_ReportSPITObject.setActionAssigned(getActionAssigned()); // Action can be assigned to type or to this object p_ReportSPITObject.setConfirmed(m_Confirmed); p_ReportSPITObject.setDelay(m_Delay); @@ -213,7 +213,7 @@ void SPITObject::fillMessageOP(SPIT_Message::ReportSPITObject &p_ReportSPITObjec p_ReportSPITObject.setValueFactor(m_ValueFactor); p_ReportSPITObject.setValueUse(m_ValueUse); } -void SPITObject::fillMessageOP(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject) { +void SPITObject::fillMessageOP(Message::RemoveObject &p_RemoveSPITObject) { p_RemoveSPITObject.setID(m_ID); } diff --git a/components/spit/src/SPITType.cpp b/components/spit/src/SPITType.cpp index 719c1cd..8cef385 100644 --- a/components/spit/src/SPITType.cpp +++ b/components/spit/src/SPITType.cpp @@ -15,6 +15,8 @@ #include "SPITType.h" #include "esp_log.h" +using namespace spit; + static const char *TAG = "SPIT"; void SPITType::eventProjectClosed(SpitRepo &repo, SpitRepo &remoteRepo) { @@ -144,7 +146,7 @@ bool SPITType::setActionAssigned(bool p_ActionAssigned) { * @return true = the SPITType is changed * false = the SPITType is NOT changed, because it is not allowed to change. */ -bool SPITType::setMessageOP(SPIT_Message::ReportSPITType &reportSpitType) { +bool SPITType::setMessageOP(Message::ReportType &reportSpitType) { bool boolChangeAllowed; bool boolChanged = false; @@ -221,7 +223,7 @@ bool SPITType::setMessageOP(SPIT_Message::ReportSPITType &reportSpitType) { return boolChanged; } -void SPITType::fillMessageOP(SPIT_Message::ReportSPITType &smReportSpitType) const { +void SPITType::fillMessageOP(Message::ReportType &smReportSpitType) const { smReportSpitType.setConfirmed(m_Confirmed); smReportSpitType.setDelay(m_DefaultDelay); smReportSpitType.setDuration(m_DefaultDuration); @@ -232,6 +234,6 @@ void SPITType::fillMessageOP(SPIT_Message::ReportSPITType &smReportSpitType) con smReportSpitType.setServerProjectIndepended(m_ServerProjectIndepended); smReportSpitType.setServerRemote(m_ServerRemote); } -void SPITType::fillMessageOP(SPIT_Message::RemoveSPITType &smRemoveSpitType) const { +void SPITType::fillMessageOP(Message::RemoveType &smRemoveSpitType) const { smRemoveSpitType.setID(m_ID); } diff --git a/components/spit/src/SPIT_Client.cpp b/components/spit/src/SPIT_Client.cpp index bc251b0..9e5c164 100644 --- a/components/spit/src/SPIT_Client.cpp +++ b/components/spit/src/SPIT_Client.cpp @@ -5,7 +5,7 @@ */ /* - * SPIt_Client handles the SPIT_Message transfer and + * SPIt_Client handles the Message transfer and * fires eventxxx functions to the SPIT_ClientInterface (implemented by the user app). * * File: SPIT_Client.cpp @@ -39,9 +39,9 @@ SPIT_Client::~SPIT_Client() { void SPIT_Client::clientProjectClose() { if (m_ConnectionStatus == Connection::Ok) { ESP_LOGI(TAG, " ... tidy up ressources"); - SPIT_Message::CloseSPITProject closeSPITProject(m_ProjName); + Message::CloseProject closeSPITProject(m_ProjName); if (sendSPITMessage(closeSPITProject) < 0) { - ESP_LOGD(TAG, "SPIT_Client could not send Client's ReportSPITProject"); + ESP_LOGD(TAG, "SPIT_Client could not send Client's ReportProject"); } } } @@ -52,15 +52,15 @@ void SPIT_Client::clientProjectLoaded() { SPITObject::setConfirmedFalse(mSpitObjects); if (m_ConnectionStatus == Connection::Ok) { - // send ReportSPITProject to the server - SPIT_Message::ReportSPITProject reportSPITProject(m_ProjName, m_ProjName); + // send ReportProject to the server + Message::ReportProject reportSPITProject(m_ProjName, m_ProjName); reportSPITProject.setFramesPerSecond(0); if (sendSPITMessage(reportSPITProject) < 0) { - ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send Client's ReportSPITProject"); + ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send Client's ReportProject"); } // send RequestProjectTransfer - SPIT_Message::RequestProjectTransfer sMRequestProjectTransfer; + Message::RequestProjectTransfer sMRequestProjectTransfer; if (sendSPITMessage(sMRequestProjectTransfer) < 0) { ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send RequestProjectTransfer"); } @@ -214,7 +214,7 @@ void SPIT_Client::eventServerChanged(SAD_DetectedServer &server) { // // } //Excample // } -int SPIT_Client::sendSPITMessage(SPIT_Message::OPPart &opPart) { +int SPIT_Client::sendSPITMessage(Message::OPPart &opPart) { if (m_MessageNumber_Send == 255) m_MessageNumber_Send = 1; else @@ -222,9 +222,9 @@ int SPIT_Client::sendSPITMessage(SPIT_Message::OPPart &opPart) { opPart.setMessageNumber(m_MessageNumber_Send); opPart.setServerInfoInHeader(m_ID, m_ServerID); - int opFlag = opPart.getHeader()->getOPFlag(); + int opFlag = opPart.getHeader()->getType(); try { - auto spitMessage = SPIT_Message::createMessage(opPart); + auto spitMessage = Message::createMessage(opPart); if (spitMessage.empty()) { return -1; } @@ -264,7 +264,7 @@ void SPIT_Client::receiveSPITMessage(SPIT_Client &rM) { continue; } auto vec = vector(buffer, buffer + rdLen); - auto spitMsg = make_unique(vec); + auto spitMsg = make_unique(vec); rM.parseSPIT_Message(move(spitMsg)); // rM.checkParseSPIT_Message(move(spitMsg)); } @@ -275,7 +275,7 @@ void SPIT_Client::resetMessageNumberReceived() { m_OvertakingSPIT_Messages.clear(); } -void SPIT_Client::checkParseSPIT_Message(unique_ptr p_SPITMessage) { +void SPIT_Client::checkParseSPIT_Message(unique_ptr p_SPITMessage) { answerWatchdog(); if (!p_SPITMessage || !p_SPITMessage->getHeader() || p_SPITMessage->getOPPart()) { ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message incomplete message"); @@ -330,7 +330,7 @@ void SPIT_Client::checkParseSPIT_Message(unique_ptr p_SPITMessage) } } -void SPIT_Client::addOvertakingSPIT_Message(unique_ptr p_SPIT_Message) { +void SPIT_Client::addOvertakingSPIT_Message(unique_ptr p_SPIT_Message) { if (!p_SPIT_Message) { return; } @@ -350,69 +350,69 @@ void SPIT_Client::addOvertakingSPIT_Message(unique_ptr p_SPIT_Mess m_OvertakingSPIT_Messages.push_back(move(p_SPIT_Message)); } -void SPIT_Client::parseSPIT_Message(unique_ptr p_SPITMessage) { +void SPIT_Client::parseSPIT_Message(unique_ptr p_SPITMessage) { answerWatchdog(); if (!p_SPITMessage || !p_SPITMessage->getHeader() || !p_SPITMessage->getOPPart()) { ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message incomplete message"); return; } - switch (p_SPITMessage->getOPFlag()) { + switch (p_SPITMessage->getType()) { //----- Connection ----- - case SPIT_Message::ConnectAnswer::OPFLAG: - parseConnectAnswer(p_SPITMessage->getOPPartAs()); + case Message::ConnectAnswer::OPFLAG: + parseConnectAnswer(p_SPITMessage->getAs()); break; - case SPIT_Message::Disconnect::OPFLAG: - parseDisconnect(p_SPITMessage->getOPPartAs()); + case Message::Disconnect::OPFLAG: + parseDisconnect(p_SPITMessage->getAs()); break; - case SPIT_Message::ReportSPITProject::OPFLAG: - parseReportSPITProject(p_SPITMessage->getOPPartAs()); + case Message::ReportProject::OPFLAG: + parseReportSPITProject(p_SPITMessage->getAs()); break; - case SPIT_Message::Watchdog::OPFLAG: - parseWatchdog(p_SPITMessage->getOPPartAs()); + case Message::Watchdog::OPFLAG: + parseWatchdog(p_SPITMessage->getAs()); break; - case SPIT_Message::WatchdogAnswer::OPFLAG: - parseWatchdogAnswer(p_SPITMessage->getOPPartAs()); + case Message::WatchdogAnswer::OPFLAG: + parseWatchdogAnswer(p_SPITMessage->getAs()); break; //----- SPIT Project ----- - case SPIT_Message::StartProjectTransfer::OPFLAG: - parseStartProjectTransfer(p_SPITMessage->getOPPartAs()); + case Message::StartProjectTransfer::OPFLAG: + parseStartProjectTransfer(p_SPITMessage->getAs()); break; - case SPIT_Message::CloseSPITProject::OPFLAG: - parseCloseSPITProject(p_SPITMessage->getOPPartAs()); + case Message::CloseProject::OPFLAG: + parseCloseSPITProject(p_SPITMessage->getAs()); break; - case SPIT_Message::RequestProjectTransfer::OPFLAG: - parseRequestProjectTransfer(p_SPITMessage->getOPPartAs()); + case Message::RequestProjectTransfer::OPFLAG: + parseRequestProjectTransfer(p_SPITMessage->getAs()); break; - case SPIT_Message::EndProjectTransfer::OPFLAG: - parseEndProjectTransfer(p_SPITMessage->getOPPartAs()); + case Message::EndProjectTransfer::OPFLAG: + parseEndProjectTransfer(p_SPITMessage->getAs()); break; //----- SPIT Types ------ - case SPIT_Message::ReportSPITType::OPFLAG: - parseReportSPITType(p_SPITMessage->getOPPartAs()); + case Message::ReportType::OPFLAG: + parseReportSPITType(p_SPITMessage->getAs()); break; - case SPIT_Message::RemoveSPITType::OPFLAG: - parseRemoveSPITType(p_SPITMessage->getOPPartAs()); + case Message::RemoveType::OPFLAG: + parseRemoveSPITType(p_SPITMessage->getAs()); //----- SPIT Objects ------ break; - case SPIT_Message::ReportSPITObject::OPFLAG: - parseReportSPITObject(p_SPITMessage->getOPPartAs()); + case Message::ReportObject::OPFLAG: + parseReportSPITObject(p_SPITMessage->getAs()); break; - case SPIT_Message::RemoveSPITObject::OPFLAG: - parseRemoveSPITObject(p_SPITMessage->getOPPartAs()); + case Message::RemoveObject::OPFLAG: + parseRemoveSPITObject(p_SPITMessage->getAs()); break; //----- Play SPIT Objects ------ - case SPIT_Message::PlaySPITStart::OPFLAG: - parsePlaySPITStart(p_SPITMessage->getOPPartAs()); + case Message::PlayStart::OPFLAG: + parsePlaySPITStart(p_SPITMessage->getAs()); break; - case SPIT_Message::PlaySPITObject::OPFLAG: - parsePlaySPITObject(p_SPITMessage->getOPPartAs()); + case Message::PlayObject::OPFLAG: + parsePlaySPITObject(p_SPITMessage->getAs()); break; - case SPIT_Message::PlaySPITEnd::OPFLAG: - parsePlaySPITEnd(p_SPITMessage->getOPPartAs()); + case Message::PlayEnd::OPFLAG: + parsePlaySPITEnd(p_SPITMessage->getAs()); break; - case SPIT_Message::ReportPlayStatus::OPFLAG: - parseReportPlayStatus(p_SPITMessage->getOPPartAs()); + case Message::ReportPlayStatus::OPFLAG: + parseReportPlayStatus(p_SPITMessage->getAs()); break; default: ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message: Unknown Message"); @@ -437,7 +437,7 @@ bool SPIT_Client::connect(string p_ServerIP, string p_ServerPort, string p_Clien m_StopReceiveSPITMessages = true; return false; } - SPIT_Message::Connect sMConnect(m_ComputerName, m_Name); + Message::Connect sMConnect(m_ComputerName, m_Name); sMConnect.setLoginName(p_LoginName); sMConnect.setLoginPassword(p_LoginPassword); sMConnect.setServerIP(p_ServerIP); @@ -483,7 +483,7 @@ void SPIT_Client::disconnectInternal(Connection p_Cause) { case Connection::Lost: break; case Connection::None: { - SPIT_Message::Disconnect sMDisconnect; + Message::Disconnect sMDisconnect; sendSPITMessage(sMDisconnect); } break; case Connection::NoneServer: @@ -525,7 +525,7 @@ void SPIT_Client::disconnectInternal(Connection p_Cause) { } } -void SPIT_Client::parseConnectAnswer(SPIT_Message::ConnectAnswer &p_ConnectAnswer) { +void SPIT_Client::parseConnectAnswer(Message::ConnectAnswer &p_ConnectAnswer) { if (p_ConnectAnswer.getClientID() != m_ID) return; @@ -555,7 +555,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(Message::Disconnect &p_Disconnect) { Connection intCauseDisconnect = Connection::NoneServer; /* function o_Callable = bind(&SPIT_Client::disconnectInternal, this, intCauseDisconnect); @@ -572,9 +572,9 @@ 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(Message::Watchdog &p_Watchdog) { // ESP_LOGD(TAG, "parse Watchdog "); - SPIT_Message::WatchdogAnswer o_WatchdogAnswer; + Message::WatchdogAnswer o_WatchdogAnswer; sendSPITMessage(o_WatchdogAnswer); } /** @@ -583,12 +583,12 @@ 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(Message::WatchdogAnswer &p_WatchdogAnswer) { answerWatchdog(); // is also done by parseSPIT_Message } void SPIT_Client::sendWatchdog() { int intResult; - SPIT_Message::Watchdog sMWatchdog; + Message::Watchdog sMWatchdog; intResult = sendSPITMessage(sMWatchdog); if (intResult < 0) { ESP_LOGW("WDT", "Failed to send Watchdog msg"); @@ -603,8 +603,8 @@ void SPIT_Client::eventWatchdogLost() { } //----- SPIT Project ------ -void SPIT_Client::parseReportSPITProject(SPIT_Message::ReportSPITProject &p_ReportSPITProject) { - ESP_LOGD(TAG, "parse ReportSPITProject"); +void SPIT_Client::parseReportSPITProject(Message::ReportProject &p_ReportSPITProject) { + ESP_LOGD(TAG, "parse ReportProject"); m_ServerProjectID = p_ReportSPITProject.getProjectID(); m_ServerProjectName = p_ReportSPITProject.getProjectName(); m_ServerFramesPerSecond = p_ReportSPITProject.getFramesPerSecond(); @@ -615,21 +615,21 @@ void SPIT_Client::parseReportSPITProject(SPIT_Message::ReportSPITProject &p_Repo SPITObject::setConfirmedFalse(mSpitObjects); // Send RequestProjectTransfer - SPIT_Message::RequestProjectTransfer sMRequestProjectTransfer; + Message::RequestProjectTransfer sMRequestProjectTransfer; if (sendSPITMessage(sMRequestProjectTransfer) < 0) { ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send RequestProjectTransfer"); } - // todo Don't send the ReportSPITProject here it should be sended after parseEndProjectTransfer - // Send client's ReportSPITProject - SPIT_Message::ReportSPITProject reportSPITProject(m_ProjName, m_ProjName); + // todo Don't send the ReportProject here it should be sended after parseEndProjectTransfer + // Send client's ReportProject + Message::ReportProject reportSPITProject(m_ProjName, m_ProjName); reportSPITProject.setFramesPerSecond(0); if (sendSPITMessage(reportSPITProject) < 0) { - ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportSPITProject"); + ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportProject"); } } -void SPIT_Client::parseCloseSPITProject(SPIT_Message::CloseSPITProject &p_CloseSPITProject) { - ESP_LOGD(TAG, "parse CloseSPITProject"); +void SPIT_Client::parseCloseSPITProject(Message::CloseProject &p_CloseSPITProject) { + ESP_LOGD(TAG, "parse CloseProject"); string stringProjectID; mCallbacks.onProjectUpdate(ProjUpdate::ServerClosed, p_CloseSPITProject.getProjectID()); SPITPlayer::clearPlayers(); @@ -639,10 +639,10 @@ 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(Message::RequestProjectTransfer &p_RequestProjectTransfer) { ESP_LOGD(TAG, "parse RequestProjectTransfer"); // StartProjectTransfer - SPIT_Message::StartProjectTransfer sMStartProjectTransfer; + Message::StartProjectTransfer sMStartProjectTransfer; if (sendSPITMessage(sMStartProjectTransfer) < 0) { return; } @@ -667,19 +667,19 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf } // EndProjectTransfer - SPIT_Message::EndProjectTransfer sMEndProjectTransfer; + Message::EndProjectTransfer sMEndProjectTransfer; sendSPITMessage(sMEndProjectTransfer); } /* NEW IMPLEMENTATION -void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransfer* p_RequestProjectTransfer) { +void SPIT_Client::parseRequestProjectTransfer(Message::RequestProjectTransfer* p_RequestProjectTransfer) { // ESP_LOGD(TAG, "parse RequestProjectTransfer"); thread* o_ThreadSend; o_ThreadSend = new thread(&this->sendProject, this); // int intResult; - // SPIT_Message::StartProjectTransfer* ptrSMStartProjectTransfer; - // SPIT_Message::EndProjectTransfer* ptrSMEndProjectTransfer; + // Message::StartProjectTransfer* ptrSMStartProjectTransfer; + // Message::EndProjectTransfer* ptrSMEndProjectTransfer; // int intCount; // SPITType* ptrSPITType; // SPITObject* ptrSPITObject; @@ -689,7 +689,7 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf // NotifyStartProjectTransfer_Client* o_RunnableStart = new NotifyStartProjectTransfer_Client(m_SPITClientInterface); // SPIT_Handler::addRunnable(o_RunnableStart); - // ptrSMStartProjectTransfer = new SPIT_Message::StartProjectTransfer(); + // ptrSMStartProjectTransfer = new Message::StartProjectTransfer(); // intResult = sendSPITMessage(ptrSMStartProjectTransfer); // if (intResult < 0) { // return; @@ -723,7 +723,7 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf // } // //EndProjectTransfer - // ptrSMEndProjectTransfer = new SPIT_Message::EndProjectTransfer(); + // ptrSMEndProjectTransfer = new Message::EndProjectTransfer(); // intResult = sendSPITMessage(ptrSMEndProjectTransfer); // if (intResult < 0) { // return; @@ -738,8 +738,8 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) { // int intResult; - // SPIT_Message::StartProjectTransfer* ptrSMStartProjectTransfer; - // SPIT_Message::EndProjectTransfer* ptrSMEndProjectTransfer; + // Message::StartProjectTransfer* ptrSMStartProjectTransfer; + // Message::EndProjectTransfer* ptrSMEndProjectTransfer; // int intCount; // SPITType* ptrSPITType; // SPITObject* ptrSPITObject; @@ -748,7 +748,7 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) { // NotifyStartProjectTransfer_Client* o_RunnableStart = new NotifyStartProjectTransfer_Client(p_PtrSPIT_Client->getSPITClientInterface()); // SPIT_Handler::addRunnable(o_RunnableStart); - // ptrSMStartProjectTransfer = new SPIT_Message::StartProjectTransfer(); + // ptrSMStartProjectTransfer = new Message::StartProjectTransfer(); // intResult = p_PtrSPIT_Client->sendSPITMessage(ptrSMStartProjectTransfer); // if (intResult < 0) { // return; @@ -785,7 +785,7 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) { // // } // //EndProjectTransfer - // ptrSMEndProjectTransfer = new SPIT_Message::EndProjectTransfer(); + // ptrSMEndProjectTransfer = new Message::EndProjectTransfer(); // intResult = p_PtrSPIT_Client->sendSPITMessage(ptrSMEndProjectTransfer); // if (intResult < 0) { // return; @@ -797,24 +797,24 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) { // //Send act } -void SPIT_Client::parseStartProjectTransfer(SPIT_Message::StartProjectTransfer &p_StartProjectTransfer) { +void SPIT_Client::parseStartProjectTransfer(Message::StartProjectTransfer &p_StartProjectTransfer) { mCallbacks.onProjectUpdate(ProjUpdate::StartTransfer, m_ServerProjectID); } -void SPIT_Client::parseEndProjectTransfer(SPIT_Message::EndProjectTransfer &p_EndProjectTransfer) { +void SPIT_Client::parseEndProjectTransfer(Message::EndProjectTransfer &p_EndProjectTransfer) { SPITObject::clearUnconfirmedSPITObjects(mSpitObjects); mCallbacks.onProjectUpdate(ProjUpdate::EndTransfer, m_ServerProjectID); - // Send SPIT_Message::ReportSPITProject after the m_SPITClientInterface is notfied of EndProjectTransfer - SPIT_Message::ReportSPITProject reportSPITProject(m_ProjName, m_ProjName); + // Send Message::ReportProject after the m_SPITClientInterface is notfied of EndProjectTransfer + Message::ReportProject reportSPITProject(m_ProjName, m_ProjName); reportSPITProject.setFramesPerSecond(0); if (sendSPITMessage(reportSPITProject) < 0) { - ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportSPITProject"); + ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportProject"); } } //----- SPIT Types ------ -void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType &p_ReportSPITType) { - ESP_LOGD(TAG, "parse ReportSPITType ID %s Name %s",p_ReportSPITType.getID().c_str(), p_ReportSPITType.getName().c_str()); +void SPIT_Client::parseReportSPITType(Message::ReportType &p_ReportSPITType) { + ESP_LOGD(TAG, "parse ReportType ID %s Name %s",p_ReportSPITType.getID().c_str(), p_ReportSPITType.getName().c_str()); SPITType *ptrSPITType; bool boolNew = false; bool boolChanged = false; @@ -863,8 +863,8 @@ void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType &p_ReportSPIT } } } -void SPIT_Client::parseRemoveSPITType(SPIT_Message::RemoveSPITType &p_RemoveSPITType) { - ESP_LOGD(TAG, "parse RemoveSPITType %s", p_RemoveSPITType.getID().c_str()); +void SPIT_Client::parseRemoveSPITType(Message::RemoveType &p_RemoveSPITType) { + ESP_LOGD(TAG, "parse RemoveType %s", p_RemoveSPITType.getID().c_str()); bool boolRemote = false; string stringSPITTypeID = p_RemoveSPITType.getID(); @@ -903,7 +903,7 @@ void SPIT_Client::parseRemoveSPITType(SPIT_Message::RemoveSPITType &p_RemoveSPIT * @return 0 = is sended, -1 = is not sended */ int SPIT_Client::sendSPITTypeInternal(SPITType &p_SPITType) { - SPIT_Message::ReportSPITType sMReportSPITType; + Message::ReportType sMReportSPITType; p_SPITType.fillMessageOP(sMReportSPITType); return sendSPITMessage(sMReportSPITType); } @@ -949,7 +949,7 @@ int SPIT_Client::removeSPITType(string p_SPITTypeID) { ptrSPITType = mSpitTypes.getEntry(p_SPITTypeID); if (ptrSPITType == nullptr) return -1; - SPIT_Message::RemoveSPITType sMRemoveSPITType; + Message::RemoveType sMRemoveSPITType; ptrSPITType->fillMessageOP(sMRemoveSPITType); mCallbacks.onSpitType(ObjectEvent::Deleted, false, *ptrSPITType); mSpitTypes.removeEntry(*ptrSPITType); @@ -988,15 +988,15 @@ 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", p_ReportSPITObject.getID().c_str()); +void SPIT_Client::parseReportSPITObject(Message::ReportObject &p_ReportSPITObject) { + ESP_LOGD(TAG, "parse ReportObject %s", p_ReportSPITObject.getID().c_str()); SPITObject *ptrSPITObject; SPITType *ptrSPITType; bool boolNew = false; bool boolRemote = false; bool boolChanged = false; { - ESP_LOGD(TAG, "parse ReportSPITObject %s / %s", p_ReportSPITObject.getID().c_str(), p_ReportSPITObject.getName().c_str()); + ESP_LOGD(TAG, "parse ReportObject %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()); @@ -1068,8 +1068,8 @@ void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject &p_Report } } } -void SPIT_Client::parseRemoveSPITObject(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject) { - ESP_LOGD(TAG, "parse RemoveSPITObject %s", p_RemoveSPITObject.getID().c_str()); +void SPIT_Client::parseRemoveSPITObject(Message::RemoveObject &p_RemoveSPITObject) { + ESP_LOGD(TAG, "parse RemoveObject %s", p_RemoveSPITObject.getID().c_str()); SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_RemoveSPITObject.getID()); if (ptrSPITObject != nullptr) { SPITType *ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->getSPITTypeID()); @@ -1086,7 +1086,7 @@ void SPIT_Client::parseRemoveSPITObject(SPIT_Message::RemoveSPITObject &p_Remove int SPIT_Client::sendSPITObjectInternal(SPITObject *ptrSPITObject) { if (ptrSPITObject == nullptr) return -1; - SPIT_Message::ReportSPITObject sMReportSPITObject; + Message::ReportObject sMReportSPITObject; ptrSPITObject->fillMessageOP(sMReportSPITObject); return sendSPITMessage(sMReportSPITObject); @@ -1150,7 +1150,7 @@ int SPIT_Client::removeSPITObject(string p_SPITObjectID) { SPITType *ptrSPITType; SPITObject *ptrSPITObject; { - SPIT_Message::RemoveSPITObject sMRemoveSPITObject; + Message::RemoveObject sMRemoveSPITObject; ptrSPITObject = mSpitObjects.getEntry(p_SPITObjectID); if (ptrSPITObject == nullptr) @@ -1168,8 +1168,8 @@ 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()); +void SPIT_Client::parsePlaySPITStart(Message::PlayStart &p_PlaySPITStart) { + ESP_LOGD(TAG, "parse PlayStart 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()); @@ -1179,7 +1179,7 @@ void SPIT_Client::parsePlaySPITStart(SPIT_Message::PlaySPITStart &p_PlaySPITStar 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(Message::PlayObject &p_PlaySPITObject) { SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITObject.getPlayerID()); SPITObject *ptrSPITObject = mSpitObjects.getEntry(p_PlaySPITObject.getSPITObjectID()); @@ -1195,7 +1195,7 @@ void SPIT_Client::parsePlaySPITObject(SPIT_Message::PlaySPITObject &p_PlaySPITOb ptrPlaySPITType->addValue(((double)p_PlaySPITObject.getValue() / 1000000), ((double)ptrSPITObject->getValueFactor() / 1000000)); } -void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd &p_PlaySPITEnd) { +void SPIT_Client::parsePlaySPITEnd(Message::PlayEnd &p_PlaySPITEnd) { SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITEnd.getPlayerID()); auto &ptrPlaySPITTypes = ptrSPITPlayer.getPlaySPITTypes(); @@ -1214,7 +1214,7 @@ void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd &p_PlaySPITEnd) { ptrSPITPlayer.endPlaySequence(); } -void SPIT_Client::parseReportPlayStatus(SPIT_Message::ReportPlayStatus &p_ReportPlayStatus) { +void SPIT_Client::parseReportPlayStatus(Message::ReportPlayStatus &p_ReportPlayStatus) { SPITType *ptrSPITType = NULL; SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_ReportPlayStatus.getID()); @@ -1257,12 +1257,12 @@ void SPIT_Client::sendRemoteObject(string p_SPITObjectID, int p_Valueppm, char p if (ptrRemoteSPITObject == nullptr) return; - SPIT_Message::PlaySPITStart playSPITStart(m_ID, m_ProjName, PLAYERTYPE_DISCRETE); + Message::PlayStart playSPITStart(m_ID, m_ProjName, PLAYERTYPE_DISCRETE); playSPITStart.setPlayerIsRunning(false); playSPITStart.setTime(0); sendSPITMessage(playSPITStart); - SPIT_Message::PlaySPITObject playSPITObject; + Message::PlayObject playSPITObject; playSPITObject.setID(ptrRemoteSPITObject->getID()); playSPITObject.setPlayPrePosition(false); playSPITObject.setPlayerID(m_ID); @@ -1270,7 +1270,7 @@ void SPIT_Client::sendRemoteObject(string p_SPITObjectID, int p_Valueppm, char p playSPITObject.setValueFlag(p_ValueFlag); sendSPITMessage(playSPITObject); - SPIT_Message::PlaySPITEnd playSPITEnd(m_ID); + Message::PlayEnd playSPITEnd(m_ID); sendSPITMessage(playSPITEnd); } diff --git a/components/spit/src/SPIT_Message.cpp b/components/spit/src/SPIT_Message.cpp deleted file mode 100644 index 437927b..0000000 --- a/components/spit/src/SPIT_Message.cpp +++ /dev/null @@ -1,1352 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -/* - * SPIT_Message contains all SPIT messages. - * A SPIT_Message contains a Header and an OPPart. - * - * File: SPIT_Message.cpp - * Author: Hagi - * - * Created on 3. April 2019, 08:51 - */ - -#include "SPIT_Message.h" - -#include "esp_log.h" -#include - -const char *TAG = "SpitMsg"; - -//---------- Receive --------- -SPIT_Message::SPIT_Message(std::vector message) { - if (message.empty()) { - ESP_LOGE(TAG, "message is emtpy, nothing to parse"); - return; - } - - if (!parse(message)) { - ESP_LOGE(TAG, "Failed ot parse message"); - return; - } -} - -// Receive - -bool SPIT_Message::parse(std::vector message) { - // parse Header - auto header = make_unique
(); - if (!header->parse(message)) { - return false; - } - - // parse OP - switch (header->getOPFlag()) { - // Connection - case SPIT_Message::Connect::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case SPIT_Message::ConnectAnswer::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case Disconnect::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case Watchdog::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case WatchdogAnswer::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - // SPITProject - case ReportSPITProject::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case CloseSPITProject::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case RequestProjectTransfer::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case StartProjectTransfer::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case EndProjectTransfer::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - // SPITType - case ReportSPITType::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case RemoveSPITType::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - // SPITObject - case ReportSPITObject::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case RemoveSPITObject::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - // PlaySPITObjects - case PlaySPITStart::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case PlaySPITObject::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case PlaySPITEnd::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - case ReportPlayStatus::OPFLAG: { - m_OPPart = make_unique(move(header)); - } break; - default: - return false; - } - - return m_OPPart->parse(message); -} - -//---------- Send ---------- -std::vector SPIT_Message::createMessage(OPPart &p_OPPart) { - if (!p_OPPart.getHeader()) { - return {}; - } - - try { - int totalSize = Header::BYTESLENGTH + p_OPPart.getBytesCount(); - std::vector msgByts(totalSize); - p_OPPart.fillBytes(msgByts); - return msgByts; - } catch (...) { - ESP_LOGE(TAG, "Failed to allocate memory"); - } - return {}; -} - -//----------- Header ----------- -SPIT_Message::Header::Header(const Header &orig) { - m_SPITID = &SPITID[0]; - m_MessageNumber = orig.getMessageNumber(); - m_ServerID = orig.getServerID(); - m_ClientID = orig.getClientID(); -} - -SPIT_Message::Header::Header() { - m_SPITID = &SPITID[0]; -} - -bool SPIT_Message::Header::parse(const std::vector &message) { - try { - m_ParseOffset = 0; - auto strID = getString(message, m_ParseOffset, 7).value(); - if (strID != SPITID) { - return false; - } - auto iVer = getInt(message, m_ParseOffset).value(); - if (iVer < 0) { - return false; - } - m_MessageNumber = getByte(message, m_ParseOffset).value(); - m_BytesCount = getInt(message, m_ParseOffset).value(); - if (m_BytesCount < 0) { - return false; - } - m_ServerID = getString(message, m_ParseOffset, 41).value(); - m_ClientID = getString(message, m_ParseOffset, 41).value(); - m_OPFlag = message[m_ParseOffset++] & 0xFF; - } catch (...) { - ESP_LOGE(TAG, "failed to parse Header"); - return false; - } - return true; -} - -// Send -SPIT_Message::Header::Header(int p_SPITVersion, int p_OPFlag) { - m_SPITID = &SPITID[0]; - m_SPITVersion = p_SPITVersion; - m_OPFlag = p_OPFlag; -} - -bool SPIT_Message::Header::fillBytes(std::vector &message) { - try { - m_ParseOffset = 0; - m_ParseOffset += setString(m_SPITID, message, m_ParseOffset, 7); - m_ParseOffset += setInt(SPITVERSION, message, m_ParseOffset); - m_ParseOffset += setByte(m_MessageNumber, message, m_ParseOffset); - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_ServerID, message, m_ParseOffset, 41); - m_ParseOffset += setString(m_ClientID, message, m_ParseOffset, 41); - m_ParseOffset += setByte(m_OPFlag, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create Header"); - return false; - } - return true; -} - -//----------- OPPart ----------- - -SPIT_Message::OPPart::~OPPart() { -} - -// Receive -SPIT_Message::OPPart::OPPart(unique_ptr
p_Header, int p_OPFlag, int size) - : m_Header(move(p_Header)), - m_BytesCount(size) { - if (!m_Header) { - m_ParseOffset = Header::BYTESLENGTH; - m_Header->setOPFlag(p_OPFlag); - } -} -void SPIT_Message::OPPart::setHeader(int opFlag) { - m_Header = make_unique
(SPITVERSION, opFlag); - m_ParseOffset = Header::BYTESLENGTH; -} - -// Send -SPIT_Message::OPPart::OPPart(int size) - : m_BytesCount(size) {} - -//--------------------------- Connection -------------------------------- -//----------- Connect ----------- -// Receive -SPIT_Message::Connect::Connect(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} - -bool SPIT_Message::Connect::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_ClientComputerName = getString(message, m_ParseOffset, 64).value(); - m_ClientName = getString(message, m_ParseOffset, 64).value(); - m_LoginName = getString(message, m_ParseOffset, 64).value(); - m_LoginPassword = getString(message, m_ParseOffset, 64).value(); - m_ServerIP = getString(message, m_ParseOffset, 40).value(); - m_ServerPort = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse Connect message"); - return false; - } - return true; -} - -// Send -SPIT_Message::Connect::Connect(string p_ComputerName, string p_ClientName) - : OPPart(BYTESLENGTH), - m_ClientComputerName(p_ComputerName), - m_ClientName(p_ClientName) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} -void SPIT_Message::Connect::setServerPort(int p_ServerPort) { - if (p_ServerPort < 0 || p_ServerPort > 65535) - p_ServerPort = 0; - m_ServerPort = p_ServerPort; -} -bool SPIT_Message::Connect::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_ClientComputerName, message, m_ParseOffset, 64); - m_ParseOffset += setString(m_ClientName, message, m_ParseOffset, 64); - m_ParseOffset += setString(m_LoginName, message, m_ParseOffset, 64); - m_ParseOffset += setString(m_LoginPassword, message, m_ParseOffset, 64); - m_ParseOffset += setString(m_ServerIP, message, m_ParseOffset, 40); - m_ParseOffset += setInt(m_ServerPort, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create Connect message"); - return false; - } - return true; -} - -//----------- ConnectAnswer ----------- - -// Receive -SPIT_Message::ConnectAnswer::ConnectAnswer(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) {} -bool SPIT_Message::ConnectAnswer::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_ServerComputerName = getString(message, m_ParseOffset, 64).value(); - m_ServerName = getString(message, m_ParseOffset, 64).value(); - m_StepTime = getInt(message, m_ParseOffset).value(); - m_Connected = getBoolean(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse ConnectAnswer message"); - return false; - } - return true; -} - -// Send -SPIT_Message::ConnectAnswer::ConnectAnswer() - : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} -void SPIT_Message::ConnectAnswer::setStepTime(int p_StepTime_ms) { - if (p_StepTime_ms < 0) - p_StepTime_ms = 1; - m_StepTime = p_StepTime_ms; -} -bool SPIT_Message::ConnectAnswer::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_ServerComputerName, message, m_ParseOffset, 64); - m_ParseOffset += setString(m_ServerName, message, m_ParseOffset, 64); - m_ParseOffset += setInt(m_StepTime, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_Connected, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create ConnectAnswer message"); - return false; - } - return true; -} - -//----------- Disconnect ----------- - -// Receive -SPIT_Message::Disconnect::Disconnect(unique_ptr
p_Header) : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::Disconnect::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse Disconnect message"); - return false; - } - return true; -} - -// Send -SPIT_Message::Disconnect::Disconnect() - : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); -} - -bool SPIT_Message::Disconnect::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create Disconnect message"); - return false; - } - return true; -} - -//----------- Watchdog ----------- -// Receive -SPIT_Message::Watchdog::Watchdog(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::Watchdog::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse Watchdog message"); - return false; - } - return true; -} - -// Send -SPIT_Message::Watchdog::Watchdog() : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} -bool SPIT_Message::Watchdog::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create Watchdog message"); - return false; - } - return true; -} - -//----------- WatchdogAnswer ----------- - -// Receive -SPIT_Message::WatchdogAnswer::WatchdogAnswer(unique_ptr
p_Header) : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::WatchdogAnswer::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse WatchdogAnswer message"); - return false; - } - return true; -} - -// Send -SPIT_Message::WatchdogAnswer::WatchdogAnswer() : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} -bool SPIT_Message::WatchdogAnswer::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create WatchdogAnswer message"); - return false; - } - return true; -} - -//--------------------------- SPITProject -------------------------------- - -//----------- ReportSPITProject ----------- -// Receive -SPIT_Message::ReportSPITProject::ReportSPITProject(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::ReportSPITProject::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_ProjectID = getString(message, m_ParseOffset, 41).value(); - m_ProjectName = getString(message, m_ParseOffset, 64).value(); - m_FramesPerSecond = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse ReportSPITProject message"); - return false; - } - return true; -} -// Send -SPIT_Message::ReportSPITProject::ReportSPITProject(string p_ProjectID, string p_ProjectName) - : OPPart(BYTESLENGTH), - m_ProjectID(p_ProjectID), - m_ProjectName(p_ProjectName) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -bool SPIT_Message::ReportSPITProject::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_ProjectID, message, m_ParseOffset, 41); - m_ParseOffset += setString(m_ProjectName, message, m_ParseOffset, 64); - m_ParseOffset += setInt(m_FramesPerSecond, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create ReportSPITProject message"); - return false; - } - return true; -} - -//----------- StartProjectTransfer ----------- - -// Receive -SPIT_Message::CloseSPITProject::CloseSPITProject(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::CloseSPITProject::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_ProjectID = getString(message, m_ParseOffset, 41).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse CloseSPITProject message"); - return false; - } - return true; -} -// Send -SPIT_Message::CloseSPITProject::CloseSPITProject(string projectID) - : OPPart(BYTESLENGTH), - m_ProjectID(projectID) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -bool SPIT_Message::CloseSPITProject::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_ProjectID, message, m_ParseOffset, 41); - } catch (...) { - ESP_LOGE(TAG, "failed to create CloseSPITProject message"); - return false; - } - return true; -} - -//----------- RequestProjectTransfer ----------- - -// Receive -SPIT_Message::RequestProjectTransfer::RequestProjectTransfer(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::RequestProjectTransfer::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse RequestProjectTransfer message"); - return false; - } - return true; -} -// Send -SPIT_Message::RequestProjectTransfer::RequestProjectTransfer() - : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} -bool SPIT_Message::RequestProjectTransfer::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create RequestProjectTransfer message"); - return false; - } - return true; -} - -//----------- StartProjectTransfer ----------- - -// Receive -SPIT_Message::StartProjectTransfer::StartProjectTransfer(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::StartProjectTransfer::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse StartProjectTransfer message"); - return false; - } - return true; -} -// Send -SPIT_Message::StartProjectTransfer::StartProjectTransfer() - : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -bool SPIT_Message::StartProjectTransfer::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create StartProjectTransfer message"); - return false; - } - return true; -} - -//----------- ENdProjectTransfer ----------- - -// Receive -SPIT_Message::EndProjectTransfer::EndProjectTransfer(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::EndProjectTransfer::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse EndProjectTransfer message"); - return false; - } - return true; -} -// Send -SPIT_Message::EndProjectTransfer::EndProjectTransfer() - : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} -bool SPIT_Message::EndProjectTransfer::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create EndProjectTransfer message"); - return false; - } - return true; -} - -//--------------------------- SPITType --------------------------------- - -//----------- ReportSPITType ----------- - -// Receive -SPIT_Message::ReportSPITType::ReportSPITType(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::ReportSPITType::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_Confirmed = getBoolean(message, m_ParseOffset).value(); - m_SPITTypeID = getString(message, m_ParseOffset, 41).value(); - m_Fixed = getBoolean(message, m_ParseOffset).value(); - m_ServerRemote = getBoolean(message, m_ParseOffset).value(); - m_ServerProjectIndepended = getBoolean(message, m_ParseOffset).value(); - m_SPITTypeGroupName = getString(message, m_ParseOffset, 39).value(); - m_SPITTypeName = getString(message, m_ParseOffset, 64).value(); - m_Delay = getLong(message, m_ParseOffset).value(); - m_Duration = getLong(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse ReportSPITType message"); - return false; - } - return true; -} -// Send -SPIT_Message::ReportSPITType::ReportSPITType() - : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -bool SPIT_Message::ReportSPITType::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = m_Header->BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_Confirmed, message, m_ParseOffset); - m_ParseOffset += setString(m_SPITTypeID, message, m_ParseOffset, 41); - m_ParseOffset += setBoolean(m_Fixed, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_ServerRemote, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_ServerProjectIndepended, message, m_ParseOffset); - m_ParseOffset += setString(m_SPITTypeGroupName, message, m_ParseOffset, 39); - m_ParseOffset += setString(m_SPITTypeName, message, m_ParseOffset, 64); - m_ParseOffset += setLong(m_Delay, message, m_ParseOffset); - m_ParseOffset += setLong(m_Duration, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create ReportSPITType message"); - return false; - } - return true; -} - -//----------- ReportSPITType ----------- - -// Receive -SPIT_Message::RemoveSPITType::RemoveSPITType(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::RemoveSPITType::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_SPITTypeID = getString(message, m_ParseOffset, 41).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse RemoveSPITType message"); - return false; - } - return true; -} -// Send -SPIT_Message::RemoveSPITType::RemoveSPITType() - : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -bool SPIT_Message::RemoveSPITType::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_SPITTypeID, message, m_ParseOffset, 41); - } catch (...) { - ESP_LOGE(TAG, "failed to create RemoveSPITType message"); - return false; - } - return true; -} - -//---------------------------- SPITObjects ---------------------------------- - -//----------- ReportSPITObject ----------- -// Receive -SPIT_Message::ReportSPITObject::ReportSPITObject(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::ReportSPITObject::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_Confirmed = getBoolean(message, m_ParseOffset).value(); - m_SPITObjectID = getString(message, m_ParseOffset, 41).value(); - m_Fixed = getBoolean(message, m_ParseOffset).value(); - m_ServerRemote = getBoolean(message, m_ParseOffset).value(); - m_SPITObjectName = getString(message, m_ParseOffset, 64).value(); - m_SPITTypeID = getString(message, m_ParseOffset, 41).value(); - m_ServerParams = getString(message, m_ParseOffset, 64).value(); - m_FrameStart = getLong(message, m_ParseOffset).value(); - m_FrameLength = getLong(message, m_ParseOffset).value(); - m_FrameFadeInLength = getLong(message, m_ParseOffset).value(); - m_FrameFadeOutLength = getLong(message, m_ParseOffset).value(); - m_ValueFactor = getInt(message, m_ParseOffset).value(); - m_ValueUse = getByte(message, m_ParseOffset).value(); - m_Track = getInt(message, m_ParseOffset).value(); - m_Remark = getString(message, m_ParseOffset, 64).value(); - m_Delay = getLong(message, m_ParseOffset).value(); - m_Duration = getLong(message, m_ParseOffset).value(); - m_ActionAssigned = getBoolean(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse ReportSPITObject message"); - return false; - } - return true; -} -// Send -SPIT_Message::ReportSPITObject::ReportSPITObject() : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -void SPIT_Message::ReportSPITObject::setDelay(long long p_Delay) { - if (p_Delay < 0) - p_Delay = 0; - m_Delay = p_Delay; -} -void SPIT_Message::ReportSPITObject::setDuration(long long p_Duration) { - if (p_Duration < 0) - p_Duration = 0; - m_Duration = p_Duration; -} - -bool SPIT_Message::ReportSPITObject::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_Confirmed, message, m_ParseOffset); - m_ParseOffset += setString(m_SPITObjectID, message, m_ParseOffset, 41); - m_ParseOffset += setBoolean(m_Fixed, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_ServerRemote, message, m_ParseOffset); - m_ParseOffset += setString(m_SPITObjectName, message, m_ParseOffset, 64); - m_ParseOffset += setString(m_SPITTypeID, message, m_ParseOffset, 41); - m_ParseOffset += setString(m_ServerParams, message, m_ParseOffset, 64); - m_ParseOffset += setLong(m_FrameStart, message, m_ParseOffset); - m_ParseOffset += setLong(m_FrameLength, message, m_ParseOffset); - m_ParseOffset += setLong(m_FrameFadeInLength, message, m_ParseOffset); - m_ParseOffset += setLong(m_FrameFadeOutLength, message, m_ParseOffset); - m_ParseOffset += setInt(m_ValueFactor, message, m_ParseOffset); - m_ParseOffset += setByte(m_ValueUse, message, m_ParseOffset); - m_ParseOffset += setInt(m_Track, message, m_ParseOffset); - m_ParseOffset += setString(m_Remark, message, m_ParseOffset, 64); - m_ParseOffset += setLong(m_Delay, message, m_ParseOffset); - m_ParseOffset += setLong(m_Duration, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_ActionAssigned, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create ReportSPITObject message"); - return false; - } - return true; -} - -//----------- RemoveSPITObject ----------- -// Receive -SPIT_Message::RemoveSPITObject::RemoveSPITObject(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::RemoveSPITObject::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_SPITObjectID = getString(message, m_ParseOffset, 41).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse RemoveSPITObject message"); - return false; - } - return true; -} - -// Send -SPIT_Message::RemoveSPITObject::RemoveSPITObject() : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -bool SPIT_Message::RemoveSPITObject::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_SPITObjectID, message, m_ParseOffset, 41); - } catch (...) { - ESP_LOGE(TAG, "failed to create RemoveSPITObject message"); - return false; - } - return true; -} - -//---------------------------- SPITPlayer ---------------------------------- - -//----------- PlaySPITStart ----------- -// Receive -SPIT_Message::PlaySPITStart::PlaySPITStart(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::PlaySPITStart::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_PlayerID = getString(message, m_ParseOffset, 41).value(); - m_PlayerName = getString(message, m_ParseOffset, 64).value(); - m_PlayerType = getByte(message, m_ParseOffset).value(); - m_PlayerIsRunning = getBoolean(message, m_ParseOffset).value(); - m_Time = getLong(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse PlaySPITStart message"); - return false; - } - return true; -} - -// Send -SPIT_Message::PlaySPITStart::PlaySPITStart(string p_PlayerID, string p_PlayerName, char p_PlayerType) - : OPPart(BYTESLENGTH), - m_PlayerID(p_PlayerID), - m_PlayerName(p_PlayerName), - m_PlayerType(p_PlayerType) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -bool SPIT_Message::PlaySPITStart::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_PlayerID, message, m_ParseOffset, 41); - m_ParseOffset += setString(m_PlayerName, message, m_ParseOffset, 64); - m_ParseOffset += setByte(m_PlayerType, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_PlayerIsRunning, message, m_ParseOffset); - m_ParseOffset += setLong(m_Time, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create PlaySPITStart message"); - return false; - } - return true; -} - -//----------- PlaySPITObject ----------- - -// Receive -SPIT_Message::PlaySPITObject::PlaySPITObject(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::PlaySPITObject::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_PlayerID = getString(message, m_ParseOffset, 41).value(); - m_SPITObjectID = getString(message, m_ParseOffset, 41).value(); - m_FrameInsideObject = getLong(message, m_ParseOffset).value(); - m_PlayPrePosition = getBoolean(message, m_ParseOffset).value(); - m_Value = getInt(message, m_ParseOffset).value(); - m_ValueFlag = getByte(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse PlaySPITObject message"); - return false; - } - return true; -} -// Send -SPIT_Message::PlaySPITObject::PlaySPITObject() - : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} -bool SPIT_Message::PlaySPITObject::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_PlayerID, message, m_ParseOffset, 41); - m_ParseOffset += setString(m_SPITObjectID, message, m_ParseOffset, 41); - m_ParseOffset += setLong(m_FrameInsideObject, message, m_ParseOffset); - m_ParseOffset += setBoolean(m_PlayPrePosition, message, m_ParseOffset); - m_ParseOffset += setInt(m_Value, message, m_ParseOffset); - m_ParseOffset += setByte(m_ValueFlag, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create PlaySPITObject message"); - return false; - } - return true; -} - -//----------- PlaySPITEnd ----------- - -// Receive -SPIT_Message::PlaySPITEnd::PlaySPITEnd(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::PlaySPITEnd::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_PlayerID = getString(message, m_ParseOffset, 41).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse PlaySPITEnd message"); - return false; - } - return true; -} -// Send -SPIT_Message::PlaySPITEnd::PlaySPITEnd(string p_PlayerID) - : OPPart(BYTESLENGTH), - m_PlayerID(p_PlayerID) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -bool SPIT_Message::PlaySPITEnd::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_PlayerID, message, m_ParseOffset, 41); - } catch (...) { - ESP_LOGE(TAG, "failed to create PlaySPITEnd message"); - return false; - } - return true; -} - -//----------- ReportPlayStatus ----------- - -// Receive -SPIT_Message::ReportPlayStatus::ReportPlayStatus(unique_ptr
p_Header) - : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { -} -bool SPIT_Message::ReportPlayStatus::parse(const std::vector &message) { - if (!m_Header) { - return false; - } - int intOPFlag = m_Header->getOPFlag(); - if (intOPFlag != OPFLAG) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(message, m_ParseOffset).value(); - m_SPITObjectID = getString(message, m_ParseOffset, 41).value(); - m_FrameInsideObject = getLong(message, m_ParseOffset).value(); - m_Value = getInt(message, m_ParseOffset).value(); - } catch (...) { - ESP_LOGE(TAG, "failed to parse ReportPlayStatus message"); - return false; - } - return true; -} -// Send -SPIT_Message::ReportPlayStatus::ReportPlayStatus() : OPPart(BYTESLENGTH) { - setHeader(OPFLAG); - m_ParseOffset = Header::BYTESLENGTH; -} - -void SPIT_Message::ReportPlayStatus::setID(string p_ID) { - m_SPITObjectID = p_ID; -} -void SPIT_Message::ReportPlayStatus::setFrameInsideObject(long long p_TimeInside) { - m_FrameInsideObject = p_TimeInside; -} -void SPIT_Message::ReportPlayStatus::setValue(int p_Value) { - m_Value = p_Value; -} -bool SPIT_Message::ReportPlayStatus::fillBytes(std::vector &message) { - if (!m_Header) { - return false; - } - if (m_Header->fillBytes(message) == false) - return false; - try { - m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); - m_ParseOffset += setString(m_SPITObjectID, message, m_ParseOffset, 41); - m_ParseOffset += setLong(m_FrameInsideObject, message, m_ParseOffset); - m_ParseOffset += setInt(m_Value, message, m_ParseOffset); - } catch (...) { - ESP_LOGE(TAG, "failed to create ReportPlayStatus message"); - return false; - } - return true; -} - -//---------------------------- static helper functions ----------------------- -bool SPIT_Message::isSystemLittleEndian() { - // todo replace with #include then if constexpr (std::endian::native == std::endian::big) - int intOne = 1; - char *firstByte; - firstByte = (char *)&intOne; - if (*firstByte > 0) { - return false; - } - return true; -} - -optional SPIT_Message::getInt(const std::vector &message, int &offset) { - if (offset < 0 || offset + 4 > message.size()) - return std::nullopt; - // low byte first - int intValue = 0; - if (isSystemLittleEndian() == false) { - intValue += ((message[offset + 0] & 0x000000ff)); - intValue += ((message[offset + 1] & 0x000000ff) << 8); - intValue += ((message[offset + 2] & 0x000000ff) << 16); - intValue += ((message[offset + 3] & 0x000000ff) << 24); - } else { - intValue += ((message[offset + 3] & 0x000000ff)); - intValue += ((message[offset + 2] & 0x000000ff) << 8); - intValue += ((message[offset + 1] & 0x000000ff) << 16); - intValue += ((message[offset + 0] & 0x000000ff) << 24); - } - offset += 4; - return intValue; -} - -int SPIT_Message::setInt(int p_Value, std::vector &message, int p_Offset) { - if ((p_Offset < 0) || (message.size() < p_Offset + 4)) - throw "ParseError_send"; - - // low byte first - if (isSystemLittleEndian() == false) { - message[p_Offset + 0] = (char)(p_Value & 0x000000ff); - message[p_Offset + 1] = (char)((p_Value & 0x0000ff00) >> 8); - message[p_Offset + 2] = (char)((p_Value & 0x00ff0000) >> 16); - message[p_Offset + 3] = (char)((p_Value & 0xff000000) >> 24); - } else { - message[p_Offset + 3] = (char)(p_Value & 0x000000ff); - message[p_Offset + 2] = (char)((p_Value & 0x0000ff00) >> 8); - message[p_Offset + 1] = (char)((p_Value & 0x00ff0000) >> 16); - message[p_Offset + 0] = (char)((p_Value & 0xff000000) >> 24); - } - return 4; -} - -optional SPIT_Message::getLong(const std::vector &message, int &offset) { - if (offset < 0 || offset + 8 > message.size()) - return std::nullopt; - - // low byte first - long long intValue = 0; - if (isSystemLittleEndian() == false) { - intValue += ((long long)(message[offset] & 0x000000ff)); - intValue += ((long long)(message[offset + 1] & 0x000000ff) << 8); - intValue += ((long long)(message[offset + 2] & 0x000000ff) << 16); - intValue += ((long long)(message[offset + 3] & 0x000000ff) << 24); - intValue += ((long long)(message[offset + 4] & 0x000000ff) << 32); - intValue += ((long long)(message[offset + 5] & 0x000000ff) << 40); - intValue += ((long long)(message[offset + 6] & 0x000000ff) << 48); - intValue += ((long long)(message[offset + 7] & 0x000000ff) << 56); - } else { - intValue += ((long long)(message[offset + 7] & 0x000000ff)); - intValue += ((long long)(message[offset + 6] & 0x000000ff) << 8); - intValue += ((long long)(message[offset + 5] & 0x000000ff) << 16); - intValue += ((long long)(message[offset + 4] & 0x000000ff) << 24); - intValue += ((long long)(message[offset + 3] & 0x000000ff) << 32); - intValue += ((long long)(message[offset + 2] & 0x000000ff) << 40); - intValue += ((long long)(message[offset + 1] & 0x000000ff) << 48); - intValue += ((long long)(message[offset + 0] & 0x000000ff) << 56); - } - offset += 8; - return intValue; -} - -int SPIT_Message::setLong(long long p_Value, std::vector &message, int p_Offset) { - if ((p_Offset < 0) || (message.size() < p_Offset + 8)) - throw "ParseError_send"; - // low byte first - if (isSystemLittleEndian() == false) { - message[p_Offset + 0] = (char)((p_Value & 0x00000000000000ff)); - message[p_Offset + 1] = (char)((p_Value & 0x000000000000ff00) >> 8); - message[p_Offset + 2] = (char)((p_Value & 0x0000000000ff0000) >> 16); - message[p_Offset + 3] = (char)((p_Value & 0x00000000ff000000) >> 24); - message[p_Offset + 4] = (char)((p_Value & 0x000000ff00000000) >> 32); - message[p_Offset + 5] = (char)((p_Value & 0x0000ff0000000000) >> 40); - message[p_Offset + 6] = (char)((p_Value & 0x00ff000000000000) >> 48); - message[p_Offset + 7] = (char)((p_Value & 0xff00000000000000) >> 56); - } else { - message[p_Offset + 7] = (char)((p_Value & 0x00000000000000ff)); - message[p_Offset + 6] = (char)((p_Value & 0x000000000000ff00) >> 8); - message[p_Offset + 5] = (char)((p_Value & 0x0000000000ff0000) >> 16); - message[p_Offset + 4] = (char)((p_Value & 0x00000000ff000000) >> 24); - message[p_Offset + 3] = (char)((p_Value & 0x000000ff00000000) >> 32); - message[p_Offset + 2] = (char)((p_Value & 0x0000ff0000000000) >> 40); - message[p_Offset + 1] = (char)((p_Value & 0x00ff000000000000) >> 48); - message[p_Offset + 0] = (char)((p_Value & 0xff00000000000000) >> 56); - } - return 8; -} - -optional SPIT_Message::getBoolean(const std::vector &message, int &offset) { - if (offset < 0 || offset + 1 > message.size()) - return std::nullopt; - return {message[offset++] > 0x00}; -} - -int SPIT_Message::setBoolean(bool p_Value, std::vector &message, int p_Offset) { - if ((p_Offset < 0) || (message.size() < p_Offset + 1)) - throw "ParseError_send"; - - if (p_Value == false) { - message[p_Offset] = 0x00; - } else { - message[p_Offset] = 0x01; - } - return 1; -} - -optional SPIT_Message::getByte(const std::vector &message, int &offset) { - if (offset < 0 || offset + 1 > message.size()) - return std::nullopt; - - return {message[offset++]}; -} - -int SPIT_Message::setByte(int p_Value, std::vector &message, int p_Offset) { - if ((p_Offset < 0) || (message.size() < p_Offset + 1)) - throw "ParseError_send"; - - message[p_Offset] = (char)(p_Value & 0xff); - return 1; -} - -optional SPIT_Message::getString(const std::vector &message, int &offset, int maxLength) { - if (offset < 0 || offset + maxLength > message.size()) - return std::nullopt; - - size_t len = strnlen(&message[offset], maxLength); - if (len >= maxLength) - return std::nullopt; - - string str(&message[offset], len); - offset += maxLength; - return str; -} - -int SPIT_Message::setString(string p_String, std::vector &message, int offset, int maxLength) { - if ((offset < 0) || (maxLength < 1) || (message.size() < offset + maxLength)) - throw "ParseError_send"; - - int intLength; - if (p_String.length() + 1 > maxLength) { - intLength = maxLength; - } else { - intLength = p_String.length() + 1; - } - int intChar = 0; - bool boolNullChar = false; - while (intChar < intLength) { - message[offset + intChar] = p_String.data()[intChar]; - if (p_String[intChar] == '\0') { - boolNullChar = true; - break; - } - intChar++; - } - if (boolNullChar == false) { - message[offset + intLength - 1] = '\0'; - } - return maxLength; -} diff --git a/components/spit/src/spit_message.cpp b/components/spit/src/spit_message.cpp new file mode 100644 index 0000000..07b393d --- /dev/null +++ b/components/spit/src/spit_message.cpp @@ -0,0 +1,1349 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * Message contains all SPIT messages. + * A Message contains a Header and an OPPart. + * + * File: Message.cpp + * Author: Hagi + * + * Created on 3. April 2019, 08:51 + */ + +#include "spit_message.hpp" + +#include "esp_log.h" +#include + +const char *TAG = "SpitMsg"; + +namespace spit { + +//---------- Receive --------- +Message::Message(std::vector message) { + if (message.empty()) { + ESP_LOGE(TAG, "message is emtpy, nothing to parse"); + return; + } + if (!parse(message)) { + ESP_LOGE(TAG, "Failed ot parse message"); + return; + } +} + +// Receive + +bool Message::parse(std::vector message) { + // parse Header + auto header = make_unique
(); + if (!header->parse(message)) { + return false; + } + + // parse OP + switch (header->getType()) { + case Message::Connect::OPFLAG: { // Connection + m_OPPart = make_unique(move(header)); + } break; + case Message::ConnectAnswer::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case Disconnect::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case Watchdog::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case WatchdogAnswer::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case ReportProject::OPFLAG: { // SpitProject + m_OPPart = make_unique(move(header)); + } break; + case CloseProject::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case RequestProjectTransfer::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case StartProjectTransfer::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case EndProjectTransfer::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case ReportType::OPFLAG: { // SpitType + m_OPPart = make_unique(move(header)); + } break; + case RemoveType::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case ReportObject::OPFLAG: { // SpitObject + m_OPPart = make_unique(move(header)); + } break; + case RemoveObject::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case PlayStart::OPFLAG: { // PlaySpitObjects + m_OPPart = make_unique(move(header)); + } break; + case PlayObject::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case PlayEnd::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + case ReportPlayStatus::OPFLAG: { + m_OPPart = make_unique(move(header)); + } break; + default: + return false; + } + + return m_OPPart->parse(message); +} + +//---------- Send ---------- +std::vector Message::createMessage(OPPart &p_OPPart) { + if (!p_OPPart.getHeader()) { + return {}; + } + + try { + int totalSize = Header::BYTESLENGTH + p_OPPart.getBytesCount(); + std::vector msgByts(totalSize); + p_OPPart.fillBytes(msgByts); + return msgByts; + } catch (...) { + ESP_LOGE(TAG, "Failed to allocate memory"); + } + return {}; +} + +//----------- Header ----------- +Message::Header::Header(const Header &orig) { + mID = &SPITID[0]; + mMessageNumber = orig.getMessageNumber(); + mServerID = orig.getServerID(); + mClientID = orig.getClientID(); +} + +Message::Header::Header() { + mID = &SPITID[0]; +} + +bool Message::Header::parse(const std::vector &message) { + try { + mParseOffset = 0; + auto strID = getString(message, mParseOffset, 7).value(); + if (strID != SPITID) { + return false; + } + auto iVer = getInt(message, mParseOffset).value(); + if (iVer < 0) { + return false; + } + mMessageNumber = getByte(message, mParseOffset).value(); + mBytesCount = getInt(message, mParseOffset).value(); + if (mBytesCount < 0) { + return false; + } + mServerID = getString(message, mParseOffset, 41).value(); + mClientID = getString(message, mParseOffset, 41).value(); + mOpFlag = message[mParseOffset++] & 0xFF; + } catch (...) { + ESP_LOGE(TAG, "failed to parse Header"); + return false; + } + return true; +} + +// Send +Message::Header::Header(int p_SPITVersion, int p_OPFlag) { + mID = &SPITID[0]; + mVersion = p_SPITVersion; + mOpFlag = p_OPFlag; +} + +bool Message::Header::fillBytes(std::vector &message) { + try { + mParseOffset = 0; + mParseOffset += setString(mID, message, mParseOffset, 7); + mParseOffset += setInt(SPITVERSION, message, mParseOffset); + mParseOffset += setByte(mMessageNumber, message, mParseOffset); + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(mServerID, message, mParseOffset, 41); + mParseOffset += setString(mClientID, message, mParseOffset, 41); + mParseOffset += setByte(mOpFlag, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create Header"); + return false; + } + return true; +} + +//----------- OPPart ----------- + +Message::OPPart::~OPPart() { +} + +// Receive +Message::OPPart::OPPart(unique_ptr
p_Header, int p_OPFlag, int size) + : mHeader(move(p_Header)), + mBytesCount(size) { + if (!mHeader) { + mParseOffset = Header::BYTESLENGTH; + mHeader->setOPFlag(p_OPFlag); + } +} +void Message::OPPart::setHeader(int opFlag) { + mHeader = make_unique
(SPITVERSION, opFlag); + mParseOffset = Header::BYTESLENGTH; +} + +// Send +Message::OPPart::OPPart(int size) + : mBytesCount(size) {} + +//--------------------------- Connection -------------------------------- +//----------- Connect ----------- +// Receive +Message::Connect::Connect(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} + +bool Message::Connect::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_ClientComputerName = getString(message, mParseOffset, 64).value(); + m_ClientName = getString(message, mParseOffset, 64).value(); + m_LoginName = getString(message, mParseOffset, 64).value(); + m_LoginPassword = getString(message, mParseOffset, 64).value(); + m_ServerIP = getString(message, mParseOffset, 40).value(); + m_ServerPort = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse Connect message"); + return false; + } + return true; +} + +// Send +Message::Connect::Connect(string p_ComputerName, string p_ClientName) + : OPPart(BYTESLENGTH), + m_ClientComputerName(p_ComputerName), + m_ClientName(p_ClientName) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} +void Message::Connect::setServerPort(int p_ServerPort) { + if (p_ServerPort < 0 || p_ServerPort > 65535) + p_ServerPort = 0; + m_ServerPort = p_ServerPort; +} +bool Message::Connect::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_ClientComputerName, message, mParseOffset, 64); + mParseOffset += setString(m_ClientName, message, mParseOffset, 64); + mParseOffset += setString(m_LoginName, message, mParseOffset, 64); + mParseOffset += setString(m_LoginPassword, message, mParseOffset, 64); + mParseOffset += setString(m_ServerIP, message, mParseOffset, 40); + mParseOffset += setInt(m_ServerPort, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create Connect message"); + return false; + } + return true; +} + +//----------- ConnectAnswer ----------- + +// Receive +Message::ConnectAnswer::ConnectAnswer(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) {} +bool Message::ConnectAnswer::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_ServerComputerName = getString(message, mParseOffset, 64).value(); + m_ServerName = getString(message, mParseOffset, 64).value(); + m_StepTime = getInt(message, mParseOffset).value(); + m_Connected = getBoolean(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse ConnectAnswer message"); + return false; + } + return true; +} + +// Send +Message::ConnectAnswer::ConnectAnswer() + : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} +void Message::ConnectAnswer::setStepTime(int p_StepTime_ms) { + if (p_StepTime_ms < 0) + p_StepTime_ms = 1; + m_StepTime = p_StepTime_ms; +} +bool Message::ConnectAnswer::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_ServerComputerName, message, mParseOffset, 64); + mParseOffset += setString(m_ServerName, message, mParseOffset, 64); + mParseOffset += setInt(m_StepTime, message, mParseOffset); + mParseOffset += setBoolean(m_Connected, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create ConnectAnswer message"); + return false; + } + return true; +} + +//----------- Disconnect ----------- + +// Receive +Message::Disconnect::Disconnect(unique_ptr
p_Header) : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::Disconnect::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse Disconnect message"); + return false; + } + return true; +} + +// Send +Message::Disconnect::Disconnect() + : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); +} + +bool Message::Disconnect::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create Disconnect message"); + return false; + } + return true; +} + +//----------- Watchdog ----------- +// Receive +Message::Watchdog::Watchdog(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::Watchdog::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse Watchdog message"); + return false; + } + return true; +} + +// Send +Message::Watchdog::Watchdog() : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} +bool Message::Watchdog::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create Watchdog message"); + return false; + } + return true; +} + +//----------- WatchdogAnswer ----------- + +// Receive +Message::WatchdogAnswer::WatchdogAnswer(unique_ptr
p_Header) : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::WatchdogAnswer::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse WatchdogAnswer message"); + return false; + } + return true; +} + +// Send +Message::WatchdogAnswer::WatchdogAnswer() : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} +bool Message::WatchdogAnswer::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create WatchdogAnswer message"); + return false; + } + return true; +} + +//--------------------------- SPITProject -------------------------------- + +//----------- ReportProject ----------- +// Receive +Message::ReportProject::ReportProject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::ReportProject::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_ProjectID = getString(message, mParseOffset, 41).value(); + m_ProjectName = getString(message, mParseOffset, 64).value(); + m_FramesPerSecond = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse ReportProject message"); + return false; + } + return true; +} +// Send +Message::ReportProject::ReportProject(string p_ProjectID, string p_ProjectName) + : OPPart(BYTESLENGTH), + m_ProjectID(p_ProjectID), + m_ProjectName(p_ProjectName) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +bool Message::ReportProject::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_ProjectID, message, mParseOffset, 41); + mParseOffset += setString(m_ProjectName, message, mParseOffset, 64); + mParseOffset += setInt(m_FramesPerSecond, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create ReportProject message"); + return false; + } + return true; +} + +//----------- StartProjectTransfer ----------- + +// Receive +Message::CloseProject::CloseProject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::CloseProject::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_ProjectID = getString(message, mParseOffset, 41).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse CloseProject message"); + return false; + } + return true; +} +// Send +Message::CloseProject::CloseProject(string projectID) + : OPPart(BYTESLENGTH), + m_ProjectID(projectID) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +bool Message::CloseProject::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_ProjectID, message, mParseOffset, 41); + } catch (...) { + ESP_LOGE(TAG, "failed to create CloseProject message"); + return false; + } + return true; +} + +//----------- RequestProjectTransfer ----------- + +// Receive +Message::RequestProjectTransfer::RequestProjectTransfer(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::RequestProjectTransfer::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse RequestProjectTransfer message"); + return false; + } + return true; +} +// Send +Message::RequestProjectTransfer::RequestProjectTransfer() + : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} +bool Message::RequestProjectTransfer::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create RequestProjectTransfer message"); + return false; + } + return true; +} + +//----------- StartProjectTransfer ----------- + +// Receive +Message::StartProjectTransfer::StartProjectTransfer(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::StartProjectTransfer::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse StartProjectTransfer message"); + return false; + } + return true; +} +// Send +Message::StartProjectTransfer::StartProjectTransfer() + : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +bool Message::StartProjectTransfer::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create StartProjectTransfer message"); + return false; + } + return true; +} + +//----------- ENdProjectTransfer ----------- + +// Receive +Message::EndProjectTransfer::EndProjectTransfer(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::EndProjectTransfer::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse EndProjectTransfer message"); + return false; + } + return true; +} +// Send +Message::EndProjectTransfer::EndProjectTransfer() + : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} +bool Message::EndProjectTransfer::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create EndProjectTransfer message"); + return false; + } + return true; +} + +//--------------------------- SPITType --------------------------------- + +//----------- ReportType ----------- + +// Receive +Message::ReportType::ReportType(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::ReportType::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_Confirmed = getBoolean(message, mParseOffset).value(); + m_SPITTypeID = getString(message, mParseOffset, 41).value(); + m_Fixed = getBoolean(message, mParseOffset).value(); + m_ServerRemote = getBoolean(message, mParseOffset).value(); + m_ServerProjectIndepended = getBoolean(message, mParseOffset).value(); + m_SPITTypeGroupName = getString(message, mParseOffset, 39).value(); + m_SPITTypeName = getString(message, mParseOffset, 64).value(); + m_Delay = getLong(message, mParseOffset).value(); + m_Duration = getLong(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse ReportType message"); + return false; + } + return true; +} +// Send +Message::ReportType::ReportType() + : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +bool Message::ReportType::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = mHeader->BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setBoolean(m_Confirmed, message, mParseOffset); + mParseOffset += setString(m_SPITTypeID, message, mParseOffset, 41); + mParseOffset += setBoolean(m_Fixed, message, mParseOffset); + mParseOffset += setBoolean(m_ServerRemote, message, mParseOffset); + mParseOffset += setBoolean(m_ServerProjectIndepended, message, mParseOffset); + mParseOffset += setString(m_SPITTypeGroupName, message, mParseOffset, 39); + mParseOffset += setString(m_SPITTypeName, message, mParseOffset, 64); + mParseOffset += setLong(m_Delay, message, mParseOffset); + mParseOffset += setLong(m_Duration, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create ReportType message"); + return false; + } + return true; +} + +//----------- ReportType ----------- + +// Receive +Message::RemoveType::RemoveType(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::RemoveType::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_SPITTypeID = getString(message, mParseOffset, 41).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse RemoveType message"); + return false; + } + return true; +} +// Send +Message::RemoveType::RemoveType() + : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +bool Message::RemoveType::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_SPITTypeID, message, mParseOffset, 41); + } catch (...) { + ESP_LOGE(TAG, "failed to create RemoveType message"); + return false; + } + return true; +} + +//---------------------------- SPITObjects ---------------------------------- + +//----------- ReportObject ----------- +// Receive +Message::ReportObject::ReportObject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::ReportObject::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_Confirmed = getBoolean(message, mParseOffset).value(); + m_SPITObjectID = getString(message, mParseOffset, 41).value(); + m_Fixed = getBoolean(message, mParseOffset).value(); + m_ServerRemote = getBoolean(message, mParseOffset).value(); + m_SPITObjectName = getString(message, mParseOffset, 64).value(); + m_SPITTypeID = getString(message, mParseOffset, 41).value(); + m_ServerParams = getString(message, mParseOffset, 64).value(); + m_FrameStart = getLong(message, mParseOffset).value(); + m_FrameLength = getLong(message, mParseOffset).value(); + m_FrameFadeInLength = getLong(message, mParseOffset).value(); + m_FrameFadeOutLength = getLong(message, mParseOffset).value(); + m_ValueFactor = getInt(message, mParseOffset).value(); + m_ValueUse = getByte(message, mParseOffset).value(); + m_Track = getInt(message, mParseOffset).value(); + m_Remark = getString(message, mParseOffset, 64).value(); + m_Delay = getLong(message, mParseOffset).value(); + m_Duration = getLong(message, mParseOffset).value(); + m_ActionAssigned = getBoolean(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse ReportObject message"); + return false; + } + return true; +} +// Send +Message::ReportObject::ReportObject() : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +void Message::ReportObject::setDelay(uint64_t p_Delay) { + if (p_Delay < 0) + p_Delay = 0; + m_Delay = p_Delay; +} +void Message::ReportObject::setDuration(uint64_t p_Duration) { + if (p_Duration < 0) + p_Duration = 0; + m_Duration = p_Duration; +} + +bool Message::ReportObject::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setBoolean(m_Confirmed, message, mParseOffset); + mParseOffset += setString(m_SPITObjectID, message, mParseOffset, 41); + mParseOffset += setBoolean(m_Fixed, message, mParseOffset); + mParseOffset += setBoolean(m_ServerRemote, message, mParseOffset); + mParseOffset += setString(m_SPITObjectName, message, mParseOffset, 64); + mParseOffset += setString(m_SPITTypeID, message, mParseOffset, 41); + mParseOffset += setString(m_ServerParams, message, mParseOffset, 64); + mParseOffset += setLong(m_FrameStart, message, mParseOffset); + mParseOffset += setLong(m_FrameLength, message, mParseOffset); + mParseOffset += setLong(m_FrameFadeInLength, message, mParseOffset); + mParseOffset += setLong(m_FrameFadeOutLength, message, mParseOffset); + mParseOffset += setInt(m_ValueFactor, message, mParseOffset); + mParseOffset += setByte(m_ValueUse, message, mParseOffset); + mParseOffset += setInt(m_Track, message, mParseOffset); + mParseOffset += setString(m_Remark, message, mParseOffset, 64); + mParseOffset += setLong(m_Delay, message, mParseOffset); + mParseOffset += setLong(m_Duration, message, mParseOffset); + mParseOffset += setBoolean(m_ActionAssigned, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create ReportObject message"); + return false; + } + return true; +} + +//----------- RemoveObject ----------- +// Receive +Message::RemoveObject::RemoveObject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::RemoveObject::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_SPITObjectID = getString(message, mParseOffset, 41).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse RemoveObject message"); + return false; + } + return true; +} + +// Send +Message::RemoveObject::RemoveObject() : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +bool Message::RemoveObject::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_SPITObjectID, message, mParseOffset, 41); + } catch (...) { + ESP_LOGE(TAG, "failed to create RemoveObject message"); + return false; + } + return true; +} + +//---------------------------- SPITPlayer ---------------------------------- + +//----------- PlayStart ----------- +// Receive +Message::PlayStart::PlayStart(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::PlayStart::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_PlayerID = getString(message, mParseOffset, 41).value(); + m_PlayerName = getString(message, mParseOffset, 64).value(); + m_PlayerType = getByte(message, mParseOffset).value(); + m_PlayerIsRunning = getBoolean(message, mParseOffset).value(); + m_Time = getLong(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse PlayStart message"); + return false; + } + return true; +} + +// Send +Message::PlayStart::PlayStart(string p_PlayerID, string p_PlayerName, char p_PlayerType) + : OPPart(BYTESLENGTH), + m_PlayerID(p_PlayerID), + m_PlayerName(p_PlayerName), + m_PlayerType(p_PlayerType) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +bool Message::PlayStart::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_PlayerID, message, mParseOffset, 41); + mParseOffset += setString(m_PlayerName, message, mParseOffset, 64); + mParseOffset += setByte(m_PlayerType, message, mParseOffset); + mParseOffset += setBoolean(m_PlayerIsRunning, message, mParseOffset); + mParseOffset += setLong(m_Time, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create PlayStart message"); + return false; + } + return true; +} + +//----------- PlayObject ----------- + +// Receive +Message::PlayObject::PlayObject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::PlayObject::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_PlayerID = getString(message, mParseOffset, 41).value(); + m_SPITObjectID = getString(message, mParseOffset, 41).value(); + m_FrameInsideObject = getLong(message, mParseOffset).value(); + m_PlayPrePosition = getBoolean(message, mParseOffset).value(); + m_Value = getInt(message, mParseOffset).value(); + m_ValueFlag = getByte(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse PlayObject message"); + return false; + } + return true; +} +// Send +Message::PlayObject::PlayObject() + : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} +bool Message::PlayObject::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_PlayerID, message, mParseOffset, 41); + mParseOffset += setString(m_SPITObjectID, message, mParseOffset, 41); + mParseOffset += setLong(m_FrameInsideObject, message, mParseOffset); + mParseOffset += setBoolean(m_PlayPrePosition, message, mParseOffset); + mParseOffset += setInt(m_Value, message, mParseOffset); + mParseOffset += setByte(m_ValueFlag, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create PlayObject message"); + return false; + } + return true; +} + +//----------- PlayEnd ----------- + +// Receive +Message::PlayEnd::PlayEnd(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::PlayEnd::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_PlayerID = getString(message, mParseOffset, 41).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse PlayEnd message"); + return false; + } + return true; +} +// Send +Message::PlayEnd::PlayEnd(string p_PlayerID) + : OPPart(BYTESLENGTH), + m_PlayerID(p_PlayerID) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +bool Message::PlayEnd::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_PlayerID, message, mParseOffset, 41); + } catch (...) { + ESP_LOGE(TAG, "failed to create PlayEnd message"); + return false; + } + return true; +} + +//----------- ReportPlayStatus ----------- + +// Receive +Message::ReportPlayStatus::ReportPlayStatus(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { +} +bool Message::ReportPlayStatus::parse(const std::vector &message) { + if (!mHeader) { + return false; + } + int intOPFlag = mHeader->getType(); + if (intOPFlag != OPFLAG) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mBytesCount = getInt(message, mParseOffset).value(); + m_SPITObjectID = getString(message, mParseOffset, 41).value(); + m_FrameInsideObject = getLong(message, mParseOffset).value(); + m_Value = getInt(message, mParseOffset).value(); + } catch (...) { + ESP_LOGE(TAG, "failed to parse ReportPlayStatus message"); + return false; + } + return true; +} +// Send +Message::ReportPlayStatus::ReportPlayStatus() : OPPart(BYTESLENGTH) { + setHeader(OPFLAG); + mParseOffset = Header::BYTESLENGTH; +} + +void Message::ReportPlayStatus::setID(string p_ID) { + m_SPITObjectID = p_ID; +} +void Message::ReportPlayStatus::setFrameInsideObject(uint64_t p_TimeInside) { + m_FrameInsideObject = p_TimeInside; +} +void Message::ReportPlayStatus::setValue(int p_Value) { + m_Value = p_Value; +} +bool Message::ReportPlayStatus::fillBytes(std::vector &message) { + if (!mHeader) { + return false; + } + if (mHeader->fillBytes(message) == false) + return false; + try { + mParseOffset = Header::BYTESLENGTH; + mParseOffset += setInt(mBytesCount, message, mParseOffset); + mParseOffset += setString(m_SPITObjectID, message, mParseOffset, 41); + mParseOffset += setLong(m_FrameInsideObject, message, mParseOffset); + mParseOffset += setInt(m_Value, message, mParseOffset); + } catch (...) { + ESP_LOGE(TAG, "failed to create ReportPlayStatus message"); + return false; + } + return true; +} + +//---------------------------- static helper functions ----------------------- +bool Message::isSystemLittleEndian() { + // todo replace with #include then if constexpr (std::endian::native == std::endian::big) + int intOne = 1; + char *firstByte; + firstByte = (char *)&intOne; + if (*firstByte > 0) { + return false; + } + return true; +} + +optional Message::getInt(const std::vector &message, int &offset) { + if (offset < 0 || offset + 4 > message.size()) + return std::nullopt; + // low byte first + int intValue = 0; + if (isSystemLittleEndian() == false) { + intValue += ((message[offset + 0] & 0x000000ff)); + intValue += ((message[offset + 1] & 0x000000ff) << 8); + intValue += ((message[offset + 2] & 0x000000ff) << 16); + intValue += ((message[offset + 3] & 0x000000ff) << 24); + } else { + intValue += ((message[offset + 3] & 0x000000ff)); + intValue += ((message[offset + 2] & 0x000000ff) << 8); + intValue += ((message[offset + 1] & 0x000000ff) << 16); + intValue += ((message[offset + 0] & 0x000000ff) << 24); + } + offset += 4; + return intValue; +} + +int Message::setInt(int p_Value, std::vector &message, int p_Offset) { + if ((p_Offset < 0) || (message.size() < p_Offset + 4)) + throw "ParseError_send"; + + // low byte first + if (isSystemLittleEndian() == false) { + message[p_Offset + 0] = (char)(p_Value & 0x000000ff); + message[p_Offset + 1] = (char)((p_Value & 0x0000ff00) >> 8); + message[p_Offset + 2] = (char)((p_Value & 0x00ff0000) >> 16); + message[p_Offset + 3] = (char)((p_Value & 0xff000000) >> 24); + } else { + message[p_Offset + 3] = (char)(p_Value & 0x000000ff); + message[p_Offset + 2] = (char)((p_Value & 0x0000ff00) >> 8); + message[p_Offset + 1] = (char)((p_Value & 0x00ff0000) >> 16); + message[p_Offset + 0] = (char)((p_Value & 0xff000000) >> 24); + } + return 4; +} + +optional Message::getLong(const std::vector &message, int &offset) { + if (offset < 0 || offset + 8 > message.size()) + return std::nullopt; + + // low byte first + uint64_t intValue = 0; + if (isSystemLittleEndian() == false) { + intValue += ((uint64_t)(message[offset] & 0x000000ff)); + intValue += ((uint64_t)(message[offset + 1] & 0x000000ff) << 8); + intValue += ((uint64_t)(message[offset + 2] & 0x000000ff) << 16); + intValue += ((uint64_t)(message[offset + 3] & 0x000000ff) << 24); + intValue += ((uint64_t)(message[offset + 4] & 0x000000ff) << 32); + intValue += ((uint64_t)(message[offset + 5] & 0x000000ff) << 40); + intValue += ((uint64_t)(message[offset + 6] & 0x000000ff) << 48); + intValue += ((uint64_t)(message[offset + 7] & 0x000000ff) << 56); + } else { + intValue += ((uint64_t)(message[offset + 7] & 0x000000ff)); + intValue += ((uint64_t)(message[offset + 6] & 0x000000ff) << 8); + intValue += ((uint64_t)(message[offset + 5] & 0x000000ff) << 16); + intValue += ((uint64_t)(message[offset + 4] & 0x000000ff) << 24); + intValue += ((uint64_t)(message[offset + 3] & 0x000000ff) << 32); + intValue += ((uint64_t)(message[offset + 2] & 0x000000ff) << 40); + intValue += ((uint64_t)(message[offset + 1] & 0x000000ff) << 48); + intValue += ((uint64_t)(message[offset + 0] & 0x000000ff) << 56); + } + offset += 8; + return intValue; +} + +int Message::setLong(uint64_t p_Value, std::vector &message, int p_Offset) { + if ((p_Offset < 0) || (message.size() < p_Offset + 8)) + throw "ParseError_send"; + // low byte first + if (isSystemLittleEndian() == false) { + message[p_Offset + 0] = (char)((p_Value & 0x00000000000000ff)); + message[p_Offset + 1] = (char)((p_Value & 0x000000000000ff00) >> 8); + message[p_Offset + 2] = (char)((p_Value & 0x0000000000ff0000) >> 16); + message[p_Offset + 3] = (char)((p_Value & 0x00000000ff000000) >> 24); + message[p_Offset + 4] = (char)((p_Value & 0x000000ff00000000) >> 32); + message[p_Offset + 5] = (char)((p_Value & 0x0000ff0000000000) >> 40); + message[p_Offset + 6] = (char)((p_Value & 0x00ff000000000000) >> 48); + message[p_Offset + 7] = (char)((p_Value & 0xff00000000000000) >> 56); + } else { + message[p_Offset + 7] = (char)((p_Value & 0x00000000000000ff)); + message[p_Offset + 6] = (char)((p_Value & 0x000000000000ff00) >> 8); + message[p_Offset + 5] = (char)((p_Value & 0x0000000000ff0000) >> 16); + message[p_Offset + 4] = (char)((p_Value & 0x00000000ff000000) >> 24); + message[p_Offset + 3] = (char)((p_Value & 0x000000ff00000000) >> 32); + message[p_Offset + 2] = (char)((p_Value & 0x0000ff0000000000) >> 40); + message[p_Offset + 1] = (char)((p_Value & 0x00ff000000000000) >> 48); + message[p_Offset + 0] = (char)((p_Value & 0xff00000000000000) >> 56); + } + return 8; +} + +optional Message::getBoolean(const std::vector &message, int &offset) { + if (offset < 0 || offset + 1 > message.size()) + return std::nullopt; + return {message[offset++] > 0x00}; +} + +int Message::setBoolean(bool p_Value, std::vector &message, int p_Offset) { + if ((p_Offset < 0) || (message.size() < p_Offset + 1)) + throw "ParseError_send"; + + if (p_Value == false) { + message[p_Offset] = 0x00; + } else { + message[p_Offset] = 0x01; + } + return 1; +} + +optional Message::getByte(const std::vector &message, int &offset) { + if (offset < 0 || offset + 1 > message.size()) + return std::nullopt; + + return {message[offset++]}; +} + +int Message::setByte(int p_Value, std::vector &message, int p_Offset) { + if ((p_Offset < 0) || (message.size() < p_Offset + 1)) + throw "ParseError_send"; + + message[p_Offset] = (char)(p_Value & 0xff); + return 1; +} + +optional Message::getString(const std::vector &message, int &offset, int maxLength) { + if (offset < 0 || offset + maxLength > message.size()) + return std::nullopt; + + size_t len = strnlen(&message[offset], maxLength); + if (len >= maxLength) + return std::nullopt; + + string str(&message[offset], len); + offset += maxLength; + return str; +} + +int Message::setString(string p_String, std::vector &message, int offset, int maxLength) { + if ((offset < 0) || (maxLength < 1) || (message.size() < offset + maxLength)) + throw "ParseError_send"; + + int intLength; + if (p_String.length() + 1 > maxLength) { + intLength = maxLength; + } else { + intLength = p_String.length() + 1; + } + int intChar = 0; + bool boolNullChar = false; + while (intChar < intLength) { + message[offset + intChar] = p_String.data()[intChar]; + if (p_String[intChar] == '\0') { + boolNullChar = true; + break; + } + intChar++; + } + if (boolNullChar == false) { + message[offset + intLength - 1] = '\0'; + } + return maxLength; +} +} \ No newline at end of file diff --git a/components/spit/uTest/CMakeLists.txt b/components/spit/uTest/CMakeLists.txt new file mode 100644 index 0000000..3c359e9 --- /dev/null +++ b/components/spit/uTest/CMakeLists.txt @@ -0,0 +1,5 @@ +UnitTestsFrame() +target_link_libraries(${moduleName} PUBLIC + fmt + hwMock +) diff --git a/components/spit/uTest/messageTest.cpp b/components/spit/uTest/messageTest.cpp new file mode 100644 index 0000000..bf721db --- /dev/null +++ b/components/spit/uTest/messageTest.cpp @@ -0,0 +1,322 @@ +/** + * @file TestableUTest.cpp + * @author Gustice + * @brief + * + * @copyright Copyright (c) 2024 + */ + +#include "doctest/doctest.h" +#include +#include + +#include "spit_message.hpp" + +using namespace spit; + +class SpitMessageFix { + protected: +}; + +void checkData(std::vector a, std::vector b) { + CHECK(a.size() == b.size()); + for (size_t i = 0; i < b.size(); ++i) { + CHECK_MESSAGE(a[i] == b[i], + fmt::format("Mismatch at index, {} : a = 0x{:02x} , b = 0x{:02x}", + i, (int)a[i], (int)b[i])); + } +} + +TEST_CASE_FIXTURE(SpitMessageFix, "Connect Request") { + std::vector msg = { + /*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x63, 0x00, 0x00, 0x00, // #spit#......c... + /*0010*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0020*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0030*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // .........db3cf24 + /*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355 + /*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06... + /*0060*/ 0x00, 0x00, 0x01, 0x30, 0x01, 0x00, 0x00, 0x64, 0x65, 0x76, 0x70, 0x69, 0x00, 0x00, 0x00, 0x00, // ...0...devpi.... + /*0070*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0080*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0090*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00a0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x74, 0x74, 0x53, 0x70, 0x69, 0x74, 0x42, // .......MqttSpitB + /*00b0*/ 0x72, 0x69, 0x64, 0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ridge........... + /*00c0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00d0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00e0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00f0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0100*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0110*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0120*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0130*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0140*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0150*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0160*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x37, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x31, 0x36, // .......172.16.16 + /*0170*/ 0x2e, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .10............. + /*0180*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, // ................ + /*0190*/ 0x3b, 0x00, 0x00 // ;.. + }; + std::vector msgC(msg.begin(), msg.end()); + + { + Message sut = Message(msgC); + CHECK_EQ(sut.getType(), Message::Connect::OPFLAG); + auto &pM = sut.getAs(); + + CHECK_EQ(pM.getClientComputerName(), "devpi"); + CHECK_EQ(pM.getClientName(), "MqttSpitBridge"); + CHECK_EQ(pM.getLoginName(), ""); + CHECK_EQ(pM.getLoginPassword(), ""); + CHECK_EQ(pM.getServerIP(), "172.16.16.10"); + CHECK_EQ(pM.getServerPort(), 15120); + } + + { + Message::Connect sut("devpi", "MqttSpitBridge"); + sut.setLoginName(""); + sut.setLoginPassword(""); + sut.setServerIP("172.16.16.10"); + sut.setServerPort(15120); + + sut.setMessageNumber(2); + sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", ""); + auto data = Message::createMessage(sut); + + CHECK(data.size() == msg.size()); + for (size_t i = 0; i < msg.size(); ++i) { + CHECK_MESSAGE(data[i] == msgC[i], + fmt::format("Mismatch at index, {} : a = 0x{:02x} , b = 0x{:02x}", + i, (int)data[i], (int)msg[i])); + } + } +} + +TEST_CASE_FIXTURE(SpitMessageFix, "Connect Response") { + std::vector msg = { + /*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x00, // #spit#......c... + /*0010*/ 0x34, 0x30, 0x35, 0x63, 0x37, 0x31, 0x30, 0x30, 0x2d, 0x36, 0x34, 0x65, 0x38, 0x2d, 0x34, 0x33, // 405c7100-64e8-43 + /*0020*/ 0x35, 0x64, 0x2d, 0x38, 0x61, 0x37, 0x62, 0x2d, 0x30, 0x30, 0x63, 0x35, 0x36, 0x32, 0x39, 0x66, // 5d-8a7b-00c5629f + /*0030*/ 0x39, 0x63, 0x63, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // 9ccf.....db3cf24 + /*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355 + /*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06... + /*0060*/ 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x00, 0x50, 0x31, 0x37, 0x67, 0x65, 0x6e, 0x31, 0x00, 0x00, // .......P17gen1.. + /*0070*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0080*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0090*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00a0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x48, 0x4f, 0x57, 0x00, // .......liveSHOW. + /*00b0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00c0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00d0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00e0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01 // .......(.... + }; + std::vector msgC(msg.begin(), msg.end()); + + { + Message sut = Message(msgC); + CHECK_EQ(sut.getType(), Message::ConnectAnswer::OPFLAG); + auto &pM = sut.getAs(); + + CHECK_EQ(pM.getServerComputerName(), "P17gen1"); + CHECK_EQ(pM.getServerName(), "liveSHOW"); + CHECK_EQ(pM.getConnected(), true); + CHECK_EQ(pM.getStepTime(), 40); + } + + { + Message::ConnectAnswer sut; + sut.setServerComputerName("P17gen1"); + sut.setServerName("liveSHOW"); + sut.setConnected(true); + sut.setStepTime(40); + + sut.setMessageNumber(1); + sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "405c7100-64e8-435d-8a7b-00c5629f9ccf"); + auto data = Message::createMessage(sut); + checkData(data, msgC); + } +} + + +TEST_CASE_FIXTURE(SpitMessageFix, "Report Spit Type") { + std::vector msg = { + /*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x63, 0x00, 0x00, 0x00, // #spit#......c... + /*0010*/ 0x34, 0x30, 0x35, 0x63, 0x37, 0x31, 0x30, 0x30, 0x2d, 0x36, 0x34, 0x65, 0x38, 0x2d, 0x34, 0x33, // 405c7100-64e8-43 + /*0020*/ 0x35, 0x64, 0x2d, 0x38, 0x61, 0x37, 0x62, 0x2d, 0x30, 0x30, 0x63, 0x35, 0x36, 0x32, 0x39, 0x66, // 5d-8a7b-00c5629f + /*0030*/ 0x39, 0x63, 0x63, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // 9ccf.....db3cf24 + /*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355 + /*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06... + /*0060*/ 0x00, 0x00, 0x15, 0xa8, 0x00, 0x00, 0x00, 0x01, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, // ........ActionMo + /*0070*/ 0x76, 0x65, 0x54, 0x6f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // veTo1........... + /*0080*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0090*/ 0x00, 0x01, 0x00, 0x01, 0x43, 0x61, 0x74, 0x61, 0x73, 0x57, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, // ....CatasWatchMo + /*00a0*/ 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vement.......... + /*00b0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x63, 0x74, 0x69, 0x6f, // ...........Actio + /*00c0*/ 0x6e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // nMoveTo1........ + /*00d0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00e0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00f0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0100*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ........... + }; + std::vector msgC(msg.begin(), msg.end()); + + { + Message sut = Message(msgC); + CHECK_EQ(sut.getType(), Message::ReportType::OPFLAG); + auto &pM = sut.getAs(); + + CHECK_EQ(pM.getConfirmed(), true); + CHECK_EQ(pM.getID(), "ActionMoveTo1"); + CHECK_EQ(pM.getFixed(), true); + CHECK_EQ(pM.getServerRemote(), false); + CHECK_EQ(pM.getServerProjectIndepended(), true); + CHECK_EQ(pM.getGroupName(), "CatasWatchMovement"); + CHECK_EQ(pM.getName(), "ActionMoveTo1"); + CHECK_EQ(pM.getDelay(), 0); + CHECK_EQ(pM.getDuration(), 0); + } + + { + Message::ReportType sut; + sut.setConfirmed(true); + sut.setID("ActionMoveTo1"); + sut.setFixed(true); + sut.setServerRemote(false); + sut.setServerProjectIndepended(true); + sut.setGroupName("CatasWatchMovement"); + sut.setName("ActionMoveTo1"); + sut.setDelay(0); + sut.setDuration(0); + + sut.setMessageNumber(6); + sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "405c7100-64e8-435d-8a7b-00c5629f9ccf"); + auto data = Message::createMessage(sut); + + checkData(data, msgC); + } +} + +TEST_CASE_FIXTURE(SpitMessageFix, "Report Spit Object") { + std::vector msg = { + /*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x63, 0x00, 0x00, 0x00, // #spit#......c... + /*0010*/ 0x34, 0x30, 0x35, 0x63, 0x37, 0x31, 0x30, 0x30, 0x2d, 0x36, 0x34, 0x65, 0x38, 0x2d, 0x34, 0x33, // 405c7100-64e8-43 + /*0020*/ 0x35, 0x64, 0x2d, 0x38, 0x61, 0x37, 0x62, 0x2d, 0x30, 0x30, 0x63, 0x35, 0x36, 0x32, 0x39, 0x66, // 5d-8a7b-00c5629f + /*0030*/ 0x39, 0x63, 0x63, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // 9ccf.....db3cf24 + /*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355 + /*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06... + /*0060*/ 0x00, 0x00, 0x1f, 0x53, 0x01, 0x00, 0x00, 0x01, 0x30, 0x30, 0x30, 0x30, 0x30, 0x6d, 0x68, 0x63, // ...S....00000mhc + /*0070*/ 0x67, 0x65, 0x64, 0x30, 0x69, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // ged0i00000000000 + /*0080*/ 0x30, 0x30, 0x30, 0x30, 0x30, 0x7a, 0x34, 0x30, 0x74, 0x63, 0x79, 0x6b, 0x63, 0x33, 0x00, 0x00, // 00000z40tcykc3.. + /*0090*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00a0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00b0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00c0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00d0*/ 0x00, 0x00, 0x00, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x31, // ...ActionMoveTo1 + /*00e0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*00f0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x69, 0x70, 0x00, // ............vip. + /*0100*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0110*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0120*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0130*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xfc, 0x12, 0x00, // ............m... + /*0140*/ 0x00, 0x00, 0x00, 0x00, 0x4b, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....K........... + /*0150*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x42, 0x0f, 0x00, // ............@B.. + /*0160*/ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0170*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0180*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*0190*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*01a0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + /*01b0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ...... + }; + std::vector msgC(msg.begin(), msg.end()); + + { + Message sut = Message(msgC); + CHECK_EQ(sut.getType(), Message::ReportObject::OPFLAG); + auto &pM = sut.getAs(); + + CHECK_EQ(pM.getConfirmed(), true); + CHECK_EQ(pM.getID(), "00000mhcged0i0000000000000000z40tcykc3"); + CHECK_EQ(pM.getFixed(), false); + CHECK_EQ(pM.getServerRemote(), false); + CHECK_EQ(pM.getName(), ""); + CHECK_EQ(pM.getSPITTypeID(), "ActionMoveTo1"); + CHECK_EQ(pM.getServerParams(), "vip"); + CHECK_EQ(pM.getFrameStart(), 1244269); + CHECK_EQ(pM.getFrameLength(), 53323); + CHECK_EQ(pM.getFrameFadeInLength(), 0); + CHECK_EQ(pM.getFrameFadeOutLength(), 0); + CHECK_EQ(pM.getValueFactor(), 1000000); + CHECK_EQ(pM.getValueUse(), 0); + CHECK_EQ(pM.getTrack(), 1); + CHECK_EQ(pM.getRemark(), ""); + CHECK_EQ(pM.getDelay(), 0); + CHECK_EQ(pM.getDuration(), 0); + CHECK_EQ(pM.getActionAssigned(), false); + } + + { + Message::ReportObject sut; + sut.setConfirmed(true); + sut.setID("00000mhcged0i0000000000000000z40tcykc3"); + sut.setFixed(false); + sut.setServerRemote(false); + sut.setName(""); + sut.setSPITTypeID("ActionMoveTo1"); + sut.setServerParams("vip"); + sut.setFrameStart(1244269); + sut.setFrameLength(53323); + sut.setFrameFadeInLength(0); + sut.setFrameFadeOutLength(0); + sut.setValueFactor(1000000); + sut.setValueUse(0); + sut.setTrack(1); + sut.setRemark(""); + sut.setDelay(0); + sut.setDuration(0); + sut.setActionAssigned(false); + + sut.setMessageNumber(21); + sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "405c7100-64e8-435d-8a7b-00c5629f9ccf"); + auto data = Message::createMessage(sut); + + checkData(data, msgC); + } +} + +TEST_CASE_FIXTURE(SpitMessageFix, "Report Play Object") { + std::vector msg = { + /*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x83, 0x63, 0x00, 0x00, 0x00, // #spit#......c... + /*0010*/ 0x34, 0x30, 0x35, 0x63, 0x37, 0x31, 0x30, 0x30, 0x2d, 0x36, 0x34, 0x65, 0x38, 0x2d, 0x34, 0x33, // 405c7100-64e8-43 + /*0020*/ 0x35, 0x64, 0x2d, 0x38, 0x61, 0x37, 0x62, 0x2d, 0x30, 0x30, 0x63, 0x35, 0x36, 0x32, 0x39, 0x66, // 5d-8a7b-00c5629f + /*0030*/ 0x39, 0x63, 0x63, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // 9ccf.....db3cf24 + /*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355 + /*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06... + /*0060*/ 0x00, 0x00, 0x28, 0x39, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x6d, 0x38, 0x75, 0x65, // ..(9...00000m8ue + /*0070*/ 0x64, 0x79, 0x79, 0x74, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // dyyt000000000000 + /*0080*/ 0x30, 0x30, 0x30, 0x31, 0x66, 0x6a, 0x30, 0x76, 0x61, 0x38, 0x62, 0x6f, 0x6d, 0x00, 0x00, 0x00, // 0001fj0va8bom... + /*0090*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ............ + }; + std::vector msgC(msg.begin(), msg.end()); + + { + Message sut = Message(msgC); + CHECK_EQ(sut.getType(), Message::ReportPlayStatus::OPFLAG); + auto &pM = sut.getAs(); + + CHECK_EQ(pM.getID(), "00000m8uedyyt0000000000000001fj0va8bom"); + CHECK_EQ(pM.getFrameInsideObject(), 0); + CHECK_EQ(pM.getValue(), 0); + } + + { + Message::ReportPlayStatus sut; + sut.setID("00000m8uedyyt0000000000000001fj0va8bom"); + sut.setFrameInsideObject(0); + sut.setValue(0); + + sut.setMessageNumber(131); + sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "405c7100-64e8-435d-8a7b-00c5629f9ccf"); + auto data = Message::createMessage(sut); + + checkData(data, msgC); + } +} diff --git a/components/spit/uTest/spitTestMain.cpp b/components/spit/uTest/spitTestMain.cpp new file mode 100644 index 0000000..3e07ed7 --- /dev/null +++ b/components/spit/uTest/spitTestMain.cpp @@ -0,0 +1,11 @@ +/** + * @file uTestMain.cpp + * @author Gustice + * @brief + */ + +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include "doctest/doctest.h" +TEST_CASE("TestTest") { + CHECK(true == true); +}