From a3e487f2f100827255976ed5556d586ddc1e273e Mon Sep 17 00:00:00 2001 From: Jakob Gegeniger Date: Sat, 5 Apr 2025 20:03:21 +0200 Subject: [PATCH] refactoring spit messages --- components/spit/include/SPITObject.h | 4 +- components/spit/include/SPIT_Client.h | 24 +- components/spit/include/SPIT_Message.h | 692 +++++------- components/spit/src/SPITObject.cpp | 42 +- components/spit/src/SPIT_Client.cpp | 41 +- components/spit/src/SPIT_Message.cpp | 1416 ++++++++---------------- 6 files changed, 818 insertions(+), 1401 deletions(-) diff --git a/components/spit/include/SPITObject.h b/components/spit/include/SPITObject.h index 837f709..5d6678d 100644 --- a/components/spit/include/SPITObject.h +++ b/components/spit/include/SPITObject.h @@ -169,8 +169,8 @@ class SPITObject { 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); + void fillMessageOP(SPIT_Message::ReportSPITObject &p_ReportSPITObject); + void fillMessageOP(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject); }; #endif /* SPITOBJECT_H */ diff --git a/components/spit/include/SPIT_Client.h b/components/spit/include/SPIT_Client.h index fd72916..b2e73b2 100644 --- a/components/spit/include/SPIT_Client.h +++ b/components/spit/include/SPIT_Client.h @@ -68,34 +68,34 @@ class SPIT_Client : I_SAD_Client { //----- Connection Status ----- public: /** No Connection established.
Either no connect tried or disconnected*/ - static const int CONNECTION_NONE = 0; + static constexpr int CONNECTION_NONE = 0; /** Server has disconnected*/ - static const int CONNECTION_NONESERVER = 1; + static constexpr int CONNECTION_NONESERVER = 1; /** The connection is lost
Either because of a network crash or because the server no longer responds.*/ - static const int CONNECTION_LOST = 2; + static constexpr int CONNECTION_LOST = 2; /** Connection to the serv er is established.*/ - static const int CONNECTION_OK = 3; + static constexpr int CONNECTION_OK = 3; /** A connection to the server is tried.*/ - static const int CONNECTION_TRYCONNECTION = 4; + static constexpr int CONNECTION_TRYCONNECTION = 4; //------ PlayerType ------ public: /** continous main player, time value can be used like a timecode.
The time value is the position in server's project.
A server should use only one main player.*/ - static const char PLAYERTYPE_MAIN = 0x02; + static constexpr char PLAYERTYPE_MAIN = 0x02; /** continous player. This player plays SPIT objects sometime during the project.*/ - static const char PLAYERTYPE_CONTINOUS = 0x01; + static constexpr char PLAYERTYPE_CONTINOUS = 0x01; /** diescrete player. This player is used to transmit single discrete values.*/ - static const char PLAYERTYPE_DISCRETE = 0x00; + static constexpr char PLAYERTYPE_DISCRETE = 0x00; //------ Value Flag ------ //------ used by sendRemoteObject public: /**Set the given value directly*/ - static const char VALUEFLAG_DIRECT = 0x00; + static constexpr char VALUEFLAG_DIRECT = 0x00; /**Increase the existing value by the given value.
This is usefull e.g. when instead of a fader a endless wheel is used*/ - static const char VALUEFLAG_INCREASE = 0x01; + static constexpr char VALUEFLAG_INCREASE = 0x01; /**Decrease the existing value by the given value.
This is usefull e.g. when instead of a fader a endless wheel is used*/ - static const char VALUEFLAG_DECREASE = 0x02; + static constexpr char VALUEFLAG_DECREASE = 0x02; //----- SPIT_Client ----- public: @@ -182,7 +182,7 @@ class SPIT_Client : I_SAD_Client { bool _doReconnect{}; // true = on eventServerDetected connect to the server identified by m_ServerID public: void fillHeader(SPIT_Message::Header *p_Header); - int sendSPITMessage(SPIT_Message::OPPart &p_SPITMessageOPPart); + int sendSPITMessage(unique_ptr spitMessageOPPart); //--------------- ServerAutoDetection SAD --------------- public: diff --git a/components/spit/include/SPIT_Message.h b/components/spit/include/SPIT_Message.h index 86ba047..e4f7c89 100644 --- a/components/spit/include/SPIT_Message.h +++ b/components/spit/include/SPIT_Message.h @@ -15,9 +15,9 @@ #define SPIT_MESSAGE_H #include -#include -#include #include +#include +#include #include using namespace std; @@ -29,10 +29,9 @@ class SPIT_Message { class Header { public: static constexpr int BYTESLENGTH = 99; - virtual ~Header(); Header(const Header &orig); Header(); - // Members + private: string m_SPITID; int m_SPITVersion{SPITVERSION}; @@ -40,7 +39,7 @@ class SPIT_Message { int m_BytesCount{BYTESLENGTH}; string m_ServerID{}; string m_ClientID{}; - int m_OPFlag; + int m_OPFlag{-1}; int m_ParseOffset{}; public: @@ -53,15 +52,15 @@ class SPIT_Message { int getOPFlag() const { return m_OPFlag; } // Receive - bool parse(char *p_Bytes, int p_ByteCount); + bool parse(const std::vector &message); // Send Header(int p_SPITVersion, int p_OPFlag); - void setMessageNumber(unsigned char p_MessageNumber); - void setServerID(string p_ServerID); - void setClientID(string p_ID); - void setOPFlag(int p_OPFlag); - bool fillBytes(char *p_Bytes, int p_ByteCount); + 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; } + bool fillBytes(std::vector &message); }; //----------- OPPart ----------- @@ -70,100 +69,92 @@ class SPIT_Message { // Members protected: - Header *m_Header; - int m_ParseOffset; + unique_ptr
m_Header{}; + int m_ParseOffset{}; int m_BytesCount; - private: - void initMembers(); - public: - virtual ~OPPart(); - // OPPart(const OPPart& orig); - Header *getHeader() const { return m_Header; } + Header *getHeader() const { return m_Header.get(); } int getBytesCount() const { return m_BytesCount; } const string getServerID() const { - if (m_Header == NULL) + if (!m_Header) { return ""; + } return m_Header->getServerID(); } const string getClientID() const { - if (m_Header == NULL) + if (!m_Header) { return ""; + } return m_Header->getClientID(); } int getOPFlag() const { - if (m_Header == NULL) + if (!m_Header) { return -1; + } return m_Header->getOPFlag(); } // Receive - public: - OPPart(Header *p_Header, int p_OPFlag); - void setHeader(Header *p_Header); - virtual bool parse(char *p_Bytes, int p_ByteCounth) = 0; + OPPart(unique_ptr
p_Header, int p_OPFlag, int size); + void setHeader(unique_ptr
p_Header); + virtual bool parse(const std::vector &message) = 0; // Send - public: - OPPart(); - virtual bool fillBytes(char *p_Bytes, int p_ByteCount) = 0; + OPPart(int size); + virtual bool fillBytes(std::vector &message) = 0; }; //----------- SPIT_Message ----------- public: - static const int SPITVERSION = 1; + static constexpr int SPITVERSION = 1; // SPIT_Object value usage - static const char VALUEUSE_DISCARD = 0x00; // value of SPITObejct is not used - static const char VALUEUSE_INRANGE = 0x01; // value of SPITOBject in range 0 - 1000000ppm - static const char VALUEUSE_OVERRIDE = 0x02; // value can be overridden + static constexpr char VALUEUSE_DISCARD = 0x00; // value of SPITObejct is not used + static constexpr char VALUEUSE_INRANGE = 0x01; // value of SPITOBject in range 0 - 1000000ppm + static constexpr char VALUEUSE_OVERRIDE = 0x02; // value can be overridden // SPIT Player type - static const char PLAYERTYPE_MAIN = 0x02; - static const char PLAYERTYPE_CONTINIOUS = 0x01; - static const char PLAYERTYPE_DISCRETE = 0x00; + static constexpr char PLAYERTYPE_MAIN = 0x02; + static constexpr char PLAYERTYPE_CONTINIOUS = 0x01; + static constexpr char PLAYERTYPE_DISCRETE = 0x00; // PlayObject value usage - static const char VALUEFLAG_DIRECT = 0x00; // use the vlue direct - static const char VALUEFLAG_INCREASE = 0x01; // increase the value - static const char VALUEFLAG_DECREASE = 0x02; // decrease the value + static constexpr char VALUEFLAG_DIRECT = 0x00; // use the vlue direct + static constexpr char VALUEFLAG_INCREASE = 0x01; // increase the value + static constexpr char VALUEFLAG_DECREASE = 0x02; // decrease the value SPIT_Message() = default; - virtual ~SPIT_Message(); - // SPIT_Message(const SPIT_Message& orig); // Members private: - char *m_MessageBytes{}; - int m_MessageByteCount{}; - Header *m_Header{}; - OPPart * m_OPPart{}; - bool m_MessageBytesCreated{}; + std::vector m_MessageBytes{}; + unique_ptr m_OPPart{}; // Receive public: - SPIT_Message(char *msgBytes, int msgSize); + SPIT_Message(std::vector message); - const Header *getHeader() const { return m_Header; } + const Header *getHeader() const { return m_OPPart->getHeader(); } int getOPFlag() const { - if (m_Header == NULL) + if (!m_OPPart || !m_OPPart->getHeader()) { return -1; - return m_Header->getOPFlag(); + } + return m_OPPart->getHeader()->getOPFlag(); } - const OPPart *getOPPart() const { return m_OPPart; } - int getMesageByteCount() const { return m_MessageByteCount; } + const OPPart *getOPPart() const { return m_OPPart.get(); } - OPPart *parse(); + private: + bool parse(); // Send public: - SPIT_Message(OPPart *p_OPPart); + SPIT_Message(unique_ptr p_OPPart); bool fillBytes(); - const char *getMessageBytes(); + const std::vector *getMessageBytes(); //------------------------------ Connection ---------------------------------- @@ -171,67 +162,58 @@ class SPIT_Message { public: class Connect : public OPPart { public: - static const int OPFLAG = 1; - static const int BYTESLENGTH = 304; + static constexpr int OPFLAG = 1; + static constexpr int BYTESLENGTH = 304; private: - string m_ClientComputerName; - string m_ClientName; - string m_LoginName; - string m_LoginPassword; - string m_ServerIP; - int m_ServerPort; - void initMembers(); + string m_ClientComputerName{}; + string m_ClientName{}; + string m_LoginName{}; + string m_LoginPassword{}; + string m_ServerIP{}; + int m_ServerPort{}; public: - ~Connect(); - // Connect(const Connect& orig); // Receive - public: - Connect(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + Connect(unique_ptr
p_Header); + bool parse(const std::vector &message); - const string getClientComputerName() const { return m_ClientComputerName; } - const string getClientName() const { return m_ClientName; } - const string getLoginName() const { return m_LoginName; } - const string getLoginPassword() const { return m_LoginPassword; } - const string getServerIP() const { return m_ServerIP; } + string getClientComputerName() const { return m_ClientComputerName; } + string getClientName() const { return m_ClientName; } + string getLoginName() const { return m_LoginName; } + string getLoginPassword() const { return m_LoginPassword; } + string getServerIP() const { return m_ServerIP; } int getServerPort() const { return m_ServerPort; } // Send - public: - Connect(); - void setClientComputerName(string p_ComputerName); - void setClientName(string p_ClientName); - void setLoginName(string p_LoginName); - void setLoginPassword(string p_LoginPassword); - void setServerIP(string p_ServerIP); + Connect(string p_ComputerName, string p_ClientName); + + void setLoginName(string p_LoginName) { m_LoginName = p_LoginName; } + void setLoginPassword(string p_LoginPassword) { m_LoginPassword = p_LoginPassword; } + void setServerIP(string p_ServerIP) { m_ServerIP = p_ServerIP; } void setServerPort(int p_ServerPort); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //----------- ConnectAnswer ----------- class ConnectAnswer : public OPPart { public: - static const int OPFLAG = 2; - static const int BYTESLENGTH = 137; + static constexpr int OPFLAG = 2; + static constexpr int BYTESLENGTH = 137; private: - string m_ServerComputerName; - string m_ServerName; - bool m_Connected; - int m_StepTime; // ms step size the Server will send play sequences - - void initMembers(); + string m_ServerComputerName{}; + string m_ServerName{}; + bool m_Connected{}; + int m_StepTime{40}; // ms step size the Server will send play sequences public: - ~ConnectAnswer(); ConnectAnswer(const ConnectAnswer &orig); // Receive - ConnectAnswer(Header *p_Header); + ConnectAnswer(unique_ptr
p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + bool parse(const std::vector &message); const string getServerComputerName() const { return m_ServerComputerName; } const string getServerName() const { return m_ServerName; } @@ -239,81 +221,63 @@ class SPIT_Message { int getStepTime() const { return m_StepTime; } // Send - public: ConnectAnswer(); - void setServerComputerName(string p_ServerComputerName); - void setServerName(string p_ContollerName); - void setConnected(bool p_Connected); + void setServerComputerName(string p_ServerComputerName) { m_ServerComputerName = p_ServerComputerName; } + void setServerName(string p_ServerName) { m_ServerName = p_ServerName; } + void setConnected(bool p_Connected) { m_Connected = p_Connected; } void setStepTime(int p_StepTime_ms); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //----------- Disconnect ----------- class Disconnect : public OPPart { public: - static const int OPFLAG = 3; - static const int BYTESLENGTH = 4; + static constexpr int OPFLAG = 3; + static constexpr int BYTESLENGTH = 4; - private: - void initMembers(); - - public: - ~Disconnect(); Disconnect(const Disconnect &orig); // Receive - Disconnect(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + Disconnect(unique_ptr
p_Header); + bool parse(const std::vector &message); // Send - public: Disconnect(); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //----------- Watchdog ----------- class Watchdog : public OPPart { public: - static const int OPFLAG = 8; - static const int BYTESLENGTH = 4; + static constexpr int OPFLAG = 8; + static constexpr int BYTESLENGTH = 4; - private: - void initMembers(); - - public: - ~Watchdog(); Watchdog(const Watchdog &orig); // Receive - Watchdog(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + Watchdog(unique_ptr
p_Header); + bool parse(const std::vector &message); // Send - public: Watchdog(); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //----------- WatchdogAnswer ----------- class WatchdogAnswer : public OPPart { public: - static const int OPFLAG = 9; - static const int BYTESLENGTH = 4; + static constexpr int OPFLAG = 9; + static constexpr int BYTESLENGTH = 4; - private: - void initMembers(); // Receive - public: - ~WatchdogAnswer(); WatchdogAnswer(const WatchdogAnswer &orig); - WatchdogAnswer(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + WatchdogAnswer(unique_ptr
p_Header); + bool parse(const std::vector &message); // Send - public: WatchdogAnswer(); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //------------------------------ SPITProject ---------------------------------- @@ -322,129 +286,96 @@ class SPIT_Message { class ReportSPITProject : public OPPart { public: - static const int OPFLAG = 11; - static const int BYTESLENGTH = 113; + static constexpr int OPFLAG = 11; + static constexpr int BYTESLENGTH = 113; private: - string m_ProjectID; - string m_ProjectName; - int m_FramesPerSecond; // Frames per second + string m_ProjectID{}; + string m_ProjectName{}; + int m_FramesPerSecond{1000}; // Frames per second - void initMembers(); // Receive public: - ~ReportSPITProject(); ReportSPITProject(const ReportSPITProject &orig); - ReportSPITProject(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); - const string getProjectID() const { - return m_ProjectID; - } - const string getProjectName() const { - return m_ProjectName; - } - int getFramesPerSecond() const { - return m_FramesPerSecond; - } + ReportSPITProject(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(); + ReportSPITProject(string p_ProjectID, string p_ProjectName); - void setProjectID(string p_ClientID); - void setProjectName(string p_ClientName); - void setFramesPerSecond(const int p_FramesPerSecond); - bool fillBytes(char *msgBytes, int p_ByteCount); + void setFramesPerSecond(const int p_FramesPerSecond) { m_FramesPerSecond = p_FramesPerSecond; } + bool fillBytes(std::vector &message); }; //----------- CloseSPITProject ----------- class CloseSPITProject : public OPPart { public: - static const int OPFLAG = 13; - static const int BYTESLENGTH = 45; + static constexpr int OPFLAG = 13; + static constexpr int BYTESLENGTH = 45; private: - string m_ProjectID; - - void initMembers(); + string m_ProjectID{}; public: - ~CloseSPITProject(); CloseSPITProject(const CloseSPITProject &orig); // Receive - CloseSPITProject(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + CloseSPITProject(unique_ptr
p_Header); + bool parse(const std::vector &message); const string getProjectID() const { return m_ProjectID; } // Send - public: - CloseSPITProject(); - - void setProjectID(string p_ClientID); - bool fillBytes(char *msgBytes, int p_ByteCount); + CloseSPITProject(string projectID); + bool fillBytes(std::vector &message); }; //----------- StartProjectTransfer ----------- class RequestProjectTransfer : public OPPart { public: - static const int OPFLAG = 15; - static const int BYTESLENGTH = 4; + static constexpr int OPFLAG = 15; + static constexpr int BYTESLENGTH = 4; - private: - void initMembers(); - - public: - ~RequestProjectTransfer(); RequestProjectTransfer(const RequestProjectTransfer &orig); // Receive - RequestProjectTransfer(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + RequestProjectTransfer(unique_ptr
p_Header); + bool parse(const std::vector &message); // Send - public: RequestProjectTransfer(); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //----------- StartProjectTransfer ----------- class StartProjectTransfer : public OPPart { public: - static const int OPFLAG = 16; - static const int BYTESLENGTH = 4; + static constexpr int OPFLAG = 16; + static constexpr int BYTESLENGTH = 4; - private: - void initMembers(); - - public: - ~StartProjectTransfer(); StartProjectTransfer(const StartProjectTransfer &orig); // Receive - StartProjectTransfer(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + StartProjectTransfer(unique_ptr
p_Header); + bool parse(const std::vector &message); // Send - public: StartProjectTransfer(); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //----------- EndProjectTransfer ----------- class EndProjectTransfer : public OPPart { public: - static const int OPFLAG = 17; - static const int BYTESLENGTH = 4; + static constexpr int OPFLAG = 17; + static constexpr int BYTESLENGTH = 4; - private: - void initMembers(); - - public: - ~EndProjectTransfer(); EndProjectTransfer(const EndProjectTransfer &orig); // Receive - EndProjectTransfer(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + EndProjectTransfer(unique_ptr
p_Header); + bool parse(const std::vector &message); // Send EndProjectTransfer(); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //---------------------------- SPIT_Types ---------------------------------- @@ -452,100 +383,73 @@ class SPIT_Message { //----------- ReportSPITType ----------- class ReportSPITType : public OPPart { public: - static const int OPFLAG = 21; - static const int BYTESLENGTH = 168; + static constexpr int OPFLAG = 21; + static constexpr int BYTESLENGTH = 168; private: - bool m_Confirmed; - string m_SPITTypeID; - bool m_Fixed; - bool m_ServerRemote; - bool m_ServerProjectIndepended; - string m_SPITTypeGroupName; - string m_SPITTypeName; - long long m_Delay; - long long m_Duration; - - void initMembers(); + bool m_Confirmed {}; + string m_SPITTypeID {}; + bool m_Fixed {}; + bool m_ServerRemote {}; + bool m_ServerProjectIndepended {}; + string m_SPITTypeGroupName {}; + string m_SPITTypeName {}; + long long m_Delay {}; + long long m_Duration {}; public: - ~ReportSPITType(); ReportSPITType(const ReportSPITType &orig); // Receive - ReportSPITType(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + ReportSPITType(unique_ptr
p_Header); + bool parse(const std::vector &message); - bool getConfirmed() const { - return m_Confirmed; - } - const string getID() const { - return m_SPITTypeID; - } - bool getFixed() const { - return m_Fixed; - } - bool getServerRemote() const { - return m_ServerRemote; - } - 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; - } + bool getConfirmed() const { return m_Confirmed; } + const string getID() const { return m_SPITTypeID; } + bool getFixed() const { return m_Fixed; } + bool getServerRemote() const { return m_ServerRemote; } + 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; } // Send - public: + ReportSPITType(); + 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; } + void setServerRemote(bool p_IsServerRemote) { m_ServerRemote = p_IsServerRemote; } + 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 setConfirmed(bool p_Confirmed); - void setID(string p_ID); - void setFixed(bool p_Fixed); - void setServerRemote(bool p_IsServerRemote); - void setServerProjectIndepended(bool p_ProjectIndpended); - void setGroupName(string p_GroupName); - void setName(string p_Name); - void setDelay(long long p_Delay); - void setDuration(long long p_Duration); - - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //----------- RemoveSPITType ----------- class RemoveSPITType : public OPPart { public: - static const int OPFLAG = 23; - static const int BYTESLENGTH = 45; + static constexpr int OPFLAG = 23; + static constexpr int BYTESLENGTH = 45; private: - string m_SPITTypeID; - - void initMembers(); + string m_SPITTypeID{}; public: - ~RemoveSPITType(); RemoveSPITType(const RemoveSPITType &orig); // Receive - RemoveSPITType(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + RemoveSPITType(unique_ptr
p_Header); + bool parse(const std::vector &message); + + const string getID() const { return m_SPITTypeID; } - const string getID() const { - return m_SPITTypeID; - } // Send RemoveSPITType(); - - void setID(string p_ID); - bool fillBytes(char *msgBytes, int p_ByteCount); + void setID(string p_ID) { m_SPITTypeID = p_ID; } + bool fillBytes(std::vector &message); }; //---------------------------- SPITObjects ---------------------------------- @@ -554,37 +458,34 @@ class SPIT_Message { class ReportSPITObject : public OPPart { public: - static const int OPFLAG = 31; - static const int BYTESLENGTH = 339; + static constexpr int OPFLAG = 31; + static constexpr int BYTESLENGTH = 339; private: - bool m_Confirmed; - string m_SPITObjectID; - bool m_Fixed; - bool m_ServerRemote; - 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; - int m_ValueFactor; - char m_ValueUse; - int m_Track; - string m_Remark; - long long m_Delay; - long long m_Duration; - bool m_ActionAssigned; - - void initMembers(); + bool m_Confirmed{}; + string m_SPITObjectID{}; + bool m_Fixed{}; + bool m_ServerRemote{}; + 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{}; + int m_ValueFactor{}; + char m_ValueUse{VALUEUSE_DISCARD}; + int m_Track{}; + string m_Remark{}; + long long m_Delay{}; + long long m_Duration{}; + bool m_ActionAssigned{}; public: - ~ReportSPITObject(); ReportSPITObject(const ReportSPITObject &orig); // Receive - ReportSPITObject(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + ReportSPITObject(unique_ptr
p_Header); + bool parse(const std::vector &message); bool getConfirmed() const { return m_Confirmed; } const string getID() const { return m_SPITObjectID; } @@ -608,54 +509,50 @@ class SPIT_Message { public: ReportSPITObject(); - void setConfirmed(bool p_Confirmed); - void setID(string p_ID); - void setFixed(bool p_Fixed); - void setServerRemote(bool p_IsRemote); - void setName(string p_Name); - void setSPITTypeID(string p_ID); - void setServerParams(string p_Parameters); - void setFrameStart(long long p_StartTime); - void setFrameLength(long long p_Length); - void setFrameFadeInLength(long long p_FadeInTime); - void setFrameFadeOutLength(long long p_FadeOutTime); - void setValueFactor(int p_Volume); - void setValueUse(char p_ValueUse); - void setTrack(int p_Track); - void setRemark(string p_Description); + void setConfirmed(bool p_Confirmed) { m_Confirmed = p_Confirmed; }; + void setID(string p_ID) { m_SPITObjectID = p_ID; }; + void setFixed(bool p_Fixed) { m_Fixed = p_Fixed; }; + void setServerRemote(bool p_IsRemote) { m_ServerRemote = p_IsRemote; }; + 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 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 setActionAssigned(bool p_ActionAssigned); - bool fillBytes(char *msgBytes, int p_ByteCount); + void setActionAssigned(bool p_ActionAssigned) { m_ActionAssigned = p_ActionAssigned; } + bool fillBytes(std::vector &message); + }; //----------- RemoveSPITObject ----------- class RemoveSPITObject : public OPPart { public: - static const int OPFLAG = 33; - static const int BYTESLENGTH = 45; + static constexpr int OPFLAG = 33; + static constexpr int BYTESLENGTH = 45; private: - string m_SPITObjectID; - - void initMembers(); + string m_SPITObjectID{}; public: - ~RemoveSPITObject(); RemoveSPITObject(const RemoveSPITObject &orig); // Receive - RemoveSPITObject(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + RemoveSPITObject(unique_ptr
p_Header); + bool parse(const std::vector &message); - const string getID() const { - return m_SPITObjectID; - } + const string getID() const { return m_SPITObjectID; } // Send public: RemoveSPITObject(); - void setID(string p_ID); - bool fillBytes(char *msgBytes, int p_ByteCount); + void setID(string p_ID) { m_SPITObjectID = p_ID; } + bool fillBytes(std::vector &message); }; //---------------------------- SPITPlayer ---------------------------------- @@ -664,24 +561,21 @@ class SPIT_Message { class PlaySPITStart : public OPPart { public: - static const int OPFLAG = 37; - static const int BYTESLENGTH = 119; + static constexpr int OPFLAG = 37; + static constexpr int BYTESLENGTH = 119; private: - string m_PlayerID; - string m_PlayerName; - char m_PlayerType; - bool m_PlayerIsRunning; + string m_PlayerID{}; + string m_PlayerName{}; + char m_PlayerType{}; + bool m_PlayerIsRunning{}; long long m_Time; // Frames - void initMembers(); - public: - ~PlaySPITStart(); PlaySPITStart(const PlaySPITStart &orig); // Receive - PlaySPITStart(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + PlaySPITStart(unique_ptr
p_Header); + bool parse(const std::vector &message); const string getPlayerID() const { return m_PlayerID; } const string getPlayerName() const { return m_PlayerName; } @@ -690,40 +584,32 @@ class SPIT_Message { long long getTime() const { return m_Time; } // Send - public: - PlaySPITStart(); - - void setPlayerID(string p_PlayerID); - void setPlayerName(string p_PlayerName); - void setPlayerType(char p_PlayerType); - void setPlayerIsRunning(bool p_IsPlaying); - void setTime(long long p_Time); - bool fillBytes(char *msgBytes, int p_ByteCount); + PlaySPITStart(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; } + bool fillBytes(std::vector &message); }; //----------- PlaySPITObject ----------- class PlaySPITObject : public OPPart { public: - static const int OPFLAG = 38; - static const int BYTESLENGTH = 100; + static constexpr int OPFLAG = 38; + static constexpr int BYTESLENGTH = 100; private: - string m_PlayerID; - string m_SPITObjectID; - long long m_FrameInsideObject; // Frames - bool m_PlayPrePosition; - int m_Value; - char m_ValueFlag; - - void initMembers(); + string m_PlayerID{}; + string m_SPITObjectID{}; + long long m_FrameInsideObject{}; // Frames + bool m_PlayPrePosition{}; + int m_Value{}; + char m_ValueFlag{VALUEFLAG_DIRECT}; public: - ~PlaySPITObject(); PlaySPITObject(const PlaySPITObject &orig); // Receive - PlaySPITObject(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + PlaySPITObject(unique_ptr
p_Header); + bool parse(const std::vector &message); const string getPlayerID() const { return m_PlayerID; } const string getSPITObjectID() const { return m_SPITObjectID; } @@ -734,61 +620,53 @@ class SPIT_Message { // Send PlaySPITObject(); - void setPlayerID(string p_PlayerID); - void setID(string p_ID); - void setFrameInsideObject(long long p_TimeInside); - void setPlayPrePosition(bool p_PlayOldPosition); - void setValue(int p_Value); - void setValueFlag(char p_ValueFlag); - bool fillBytes(char *msgBytes, int p_ByteCount); + 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 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 { public: - static const int OPFLAG = 39; - static const int BYTESLENGTH = 45; + static constexpr int OPFLAG = 39; + static constexpr int BYTESLENGTH = 45; private: - string m_PlayerID; - - void initMembers(); + string m_PlayerID{}; public: - ~PlaySPITEnd(); PlaySPITEnd(const PlaySPITEnd &orig); // Receive - PlaySPITEnd(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); - + PlaySPITEnd(unique_ptr
p_Header); + bool parse(const std::vector &message); const string getPlayerID() const { return m_PlayerID; } + // Send - public: - PlaySPITEnd(); - void setPlayerID(string p_PlayerID); - bool fillBytes(char *msgBytes, int p_ByteCount); + PlaySPITEnd(string p_PlayerID); + bool fillBytes(std::vector &message); }; //----------- ReportPlayStatus ----------- class ReportPlayStatus : public OPPart { public: - static const int OPFLAG = 40; - static const int BYTESLENGTH = 57; + static constexpr int OPFLAG = 40; + static constexpr int BYTESLENGTH = 57; private: - string m_SPITObjectID; - long long m_FrameInsideObject; // Frames - int m_Value; - - void initMembers(); + string m_SPITObjectID{}; + long long m_FrameInsideObject{}; // Frames + int m_Value{}; public: - ~ReportPlayStatus(); ReportPlayStatus(const ReportPlayStatus &orig); // Receive - ReportPlayStatus(Header *p_Header); - bool parse(char *p_Bytes, int p_ByteCount); + ReportPlayStatus(unique_ptr
p_Header); + bool parse(const std::vector &message); const string getID() const { return m_SPITObjectID; } long long getFrameInsideObject() const { return m_FrameInsideObject; } @@ -799,53 +677,41 @@ class SPIT_Message { void setID(string p_ID); void setFrameInsideObject(long long p_TimeInside); void setValue(int p_Value); - bool fillBytes(char *msgBytes, int p_ByteCount); + bool fillBytes(std::vector &message); }; //----------------------- static helper functions ---------------------------- public: static bool isSystemLittleEndian(); - static optional getInt(char *bytes, int size, int& offset); - static optional getLong(char *bytes, int size, int &offset); - static optional getBoolean(char *bytes, int size, int& offset); - static optional getByte(char *bytes, int size, int& offset); - static int setInt(int value, char *bytes, int size, int offset); - static int setLong(long long value, char *bytes, int size, int offset); - static int setBoolean(bool value, char *bytes, int size, int offset); - static int setByte(int value, char *bytes, int size, int offset); + static optional getInt(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 setBoolean(bool value, std::vector &message, int offset); + static int setByte(int value, std::vector &message, int offset); /** * Returns the string char* of the part of the byte sequence (0x00 null terminated). * @param p_Bytes the byte array * @param offset the startposition of strings bytes - * @param p_Length the length of the string included the null terminate byte (0x00).
+ * @param p_Length the length of the string included the null terminate byte (0x00). * The length of the string will be p_Length -1. */ - static optional getString(char *bytes, int size, int &offset, int maxLength); + static optional getString(const std::vector &message, int &offset, int maxLength); /** - * Fill the p_String in the byte array.
+ * Fill the p_String in the byte array. * If p_String length is greater than p_Length -1, the p_String will be truncated. * CAUTION the return value should be freed after use. * @param p_String the string - * @param p_Bytes the byte array where the string is filled - * @param p_Offset the offset inside the byte array - * @param p_Length the maximal length of the string included the null character.
- * @throws Exception if p_String == NULL, p_Bytes == NULL
- * p_Offset less than 0
+ * @param p_Length the maximal length of the string included the null character. + * @throws Exception if p_String == nullptr, p_Bytes == nullptr + * p_Offset less than 0 * p_ByteCount less than p_Offset + p_Length * @return p_Length */ - static int setString(string p_String, char *p_Bytes, int p_ByteCount, int p_Offset, int p_Length); - /** - * Compares two strings for equality. - * @param p_String1 string terminated by null character - * @param p_String2 string terminated by null character - * @return true if both strings are equal
- * false if the strings are NULL or not equal or not terminated by "\0" - */ - // static bool stringEqual(const char* p_String1, const char* p_String2); - // static char* stringCopy(const char* p_String); - static char *createByteArray(const OPPart &p_OPPart, int *p_BytesCount); + static int setString(string p_String, std::vector &message, int p_Offset, int p_Length); }; #endif /* SPIT_MESSAGE_H */ diff --git a/components/spit/src/SPITObject.cpp b/components/spit/src/SPITObject.cpp index db5837b..9797b73 100644 --- a/components/spit/src/SPITObject.cpp +++ b/components/spit/src/SPITObject.cpp @@ -324,28 +324,28 @@ bool SPITObject::setMessageOP(SPIT_Message::ReportSPITObject *p_ReportSPITObject return boolChanged; } -void SPITObject::fillMessageOP(SPIT_Message::ReportSPITObject *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); - p_ReportSPITObject->setDuration(m_Duration); - p_ReportSPITObject->setFixed(m_Fixed); - p_ReportSPITObject->setFrameFadeInLength(m_FrameFadeInLength); - p_ReportSPITObject->setFrameFadeOutLength(m_FrameFadeOutLength); - p_ReportSPITObject->setFrameLength(m_FrameLength); - p_ReportSPITObject->setFrameStart(m_FrameStart); - p_ReportSPITObject->setID(m_ID); - p_ReportSPITObject->setName(m_Name); - p_ReportSPITObject->setRemark(m_Remark); - p_ReportSPITObject->setSPITTypeID(m_SPITTypeID); - p_ReportSPITObject->setServerParams(m_ServerParams); - p_ReportSPITObject->setServerRemote(m_ServerRemote); - p_ReportSPITObject->setTrack(m_Track); - p_ReportSPITObject->setValueFactor(m_ValueFactor); - p_ReportSPITObject->setValueUse(m_ValueUse); +void SPITObject::fillMessageOP(SPIT_Message::ReportSPITObject &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); + p_ReportSPITObject.setDuration(m_Duration); + p_ReportSPITObject.setFixed(m_Fixed); + p_ReportSPITObject.setFrameFadeInLength(m_FrameFadeInLength); + p_ReportSPITObject.setFrameFadeOutLength(m_FrameFadeOutLength); + p_ReportSPITObject.setFrameLength(m_FrameLength); + p_ReportSPITObject.setFrameStart(m_FrameStart); + p_ReportSPITObject.setID(m_ID); + p_ReportSPITObject.setName(m_Name); + p_ReportSPITObject.setRemark(m_Remark); + p_ReportSPITObject.setSPITTypeID(m_SPITTypeID); + p_ReportSPITObject.setServerParams(m_ServerParams); + p_ReportSPITObject.setServerRemote(m_ServerRemote); + p_ReportSPITObject.setTrack(m_Track); + p_ReportSPITObject.setValueFactor(m_ValueFactor); + p_ReportSPITObject.setValueUse(m_ValueUse); } -void SPITObject::fillMessageOP(SPIT_Message::RemoveSPITObject *p_RemoveSPITObject) { - p_RemoveSPITObject->setID(m_ID); +void SPITObject::fillMessageOP(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject) { + p_RemoveSPITObject.setID(m_ID); } void SPITObject::setID(const string &id) { diff --git a/components/spit/src/SPIT_Client.cpp b/components/spit/src/SPIT_Client.cpp index a300789..f0165f5 100644 --- a/components/spit/src/SPIT_Client.cpp +++ b/components/spit/src/SPIT_Client.cpp @@ -310,18 +310,13 @@ void SPIT_Client::stopReceiveSPITMessages() { } void SPIT_Client::receiveSPITMessage(SPIT_Client &rM) { - - char buffer[MAXSPITMESSAGEBYTECOUNT]; - int intResult; + char buffer[MAXSPITMESSAGEBYTECOUNT + 1]; + int rdLen; while (rM.m_StopReceiveSPITMessages == false) { - if (rM.m_StopReceiveSPITMessages == true) { - return; - } - intResult = rM.mSPITSocket->receiveMessage(buffer, MAXSPITMESSAGEBYTECOUNT, nullptr); - if (intResult < 0) { + rdLen = rM.mSPITSocket->receiveMessage(buffer, MAXSPITMESSAGEBYTECOUNT, nullptr); + if (rdLen < 0) { if (rM.m_StopReceiveSPITMessages) { return; - ; } continue; } @@ -1496,22 +1491,18 @@ fos::Semaphore SPIT_Client::sStartSad; void SPIT_Client::processSocketTask(SPIT_Client &instance) { ESP_LOGI(TAG, "Starting Socket managing"); - static const string SERVERAUTODETECT_PRECODE = "#SAD#"; static const string SERVERAUTODETECT_SEPERATOR = "#,#"; static const string SERVERAUTODETECT_TASKID = "#spit#"; // -> "#SAD##,##spit#" static const string SERVERAUTODETECT_PORT = "15110"; static constexpr int WATCHDOGTIME = 3000; - string stringDatagram = SERVERAUTODETECT_PRECODE + SERVERAUTODETECT_SEPERATOR + SERVERAUTODETECT_TASKID; - int intDatagramLength = stringDatagram.length(); - string stringPart; - string stringParts[10]; - while (true) { sStartSad.take(); bool searching = true; instance.mSPITSocket->setBroadcast(true); + string stringDatagram = SERVERAUTODETECT_PRECODE + SERVERAUTODETECT_SEPERATOR + SERVERAUTODETECT_TASKID; + int intDatagramLength = stringDatagram.length(); while (searching) { if (instance.abortSearch) break; @@ -1526,29 +1517,27 @@ void SPIT_Client::processSocketTask(SPIT_Client &instance) { bool receiving = true; while (receiving) { - if (instance.abortSearch) + if (instance.abortSearch) { break; - - char buffer[512 + 1]; + } + constexpr int SIZE = 512; + char buffer[SIZE + 1]; string stringServerIP; - int intReceivedByteCount = instance.mSPITSocket->receiveMessage(buffer, 512, &stringServerIP); + int intReceivedByteCount = instance.mSPITSocket->receiveMessage(buffer, SIZE, &stringServerIP); if (intReceivedByteCount <= 0) { break; } - - // add null chararcter - if (intReceivedByteCount < 512) { buffer[intReceivedByteCount] = '\0'; - } else { - buffer[512] = '\0'; - } string stringMessage = buffer; // Check if precode is ok if (stringMessage.find(SERVERAUTODETECT_PRECODE.data(), 0) != 0) { - return; + break; } int intIndex = 0; int intOldPos = 0; + string stringPart; + string stringParts[10]; + while (intIndex < SAD_DetectedServer::PARAMINDEX_IP) { int intPos = stringMessage.find(SERVERAUTODETECT_SEPERATOR.data(), intOldPos); if (intPos == string::npos) { diff --git a/components/spit/src/SPIT_Message.cpp b/components/spit/src/SPIT_Message.cpp index 7825600..b5e1803 100644 --- a/components/spit/src/SPIT_Message.cpp +++ b/components/spit/src/SPIT_Message.cpp @@ -16,133 +16,109 @@ #include "SPIT_Message.h" -#include #include "esp_log.h" +#include -const char * TAG = "SpitMsg"; +const char *TAG = "SpitMsg"; //---------- Receive --------- -SPIT_Message::SPIT_Message(char *msgBytes, int msgSize) { - m_MessageBytes = msgBytes; - if (m_MessageBytes == nullptr) { - m_MessageByteCount = 0; +SPIT_Message::SPIT_Message(std::vector message) { + if (message.empty()) { + ESP_LOGE(TAG, "message is emtpy, nothing to parse"); return; } - m_MessageByteCount = msgSize; + + m_MessageBytes = message; if (!parse()) { ESP_LOGE(TAG, "Failed ot parse message"); + return; } } -SPIT_Message::~SPIT_Message() { - delete m_OPPart; - if (m_MessageBytesCreated && m_MessageBytes != nullptr) { - free(m_MessageBytes); - } -} - - // Receive -SPIT_Message::OPPart *SPIT_Message::parse() { - if (m_MessageBytes == nullptr) - return nullptr; - m_OPPart = nullptr; - m_MessageBytesCreated = false; +bool SPIT_Message::parse() { // parse Header - m_Header = new Header(); - if (m_Header->parse(m_MessageBytes, m_MessageByteCount) == false) { - m_Header = nullptr; - m_OPPart = nullptr; - return nullptr; + auto header = make_unique
(); + if (!header->parse(m_MessageBytes)) { + return false; } // parse OP - switch (m_Header->getOPFlag()) { + switch (header->getOPFlag()) { // Connection case SPIT_Message::Connect::OPFLAG: { - m_OPPart = new Connect(m_Header); + m_OPPart = make_unique(move(header)); } break; case SPIT_Message::ConnectAnswer::OPFLAG: { - m_OPPart = new ConnectAnswer(m_Header); + m_OPPart = make_unique(move(header)); } break; case Disconnect::OPFLAG: { - m_OPPart = new Disconnect(m_Header); + m_OPPart = make_unique(move(header)); } break; case Watchdog::OPFLAG: { - m_OPPart = new Watchdog(m_Header); + m_OPPart = make_unique(move(header)); } break; case WatchdogAnswer::OPFLAG: { - m_OPPart = new WatchdogAnswer(m_Header); + m_OPPart = make_unique(move(header)); } break; - // SPITProject case ReportSPITProject::OPFLAG: { - m_OPPart = new ReportSPITProject(m_Header); + m_OPPart = make_unique(move(header)); } break; case CloseSPITProject::OPFLAG: { - m_OPPart = new CloseSPITProject(m_Header); + m_OPPart = make_unique(move(header)); } break; case RequestProjectTransfer::OPFLAG: { - m_OPPart = new RequestProjectTransfer(m_Header); + m_OPPart = make_unique(move(header)); } break; case StartProjectTransfer::OPFLAG: { - m_OPPart = new StartProjectTransfer(m_Header); + m_OPPart = make_unique(move(header)); } break; case EndProjectTransfer::OPFLAG: { - m_OPPart = new EndProjectTransfer(m_Header); + m_OPPart = make_unique(move(header)); } break; - // SPITType case ReportSPITType::OPFLAG: { - m_OPPart = new ReportSPITType(m_Header); + m_OPPart = make_unique(move(header)); } break; case RemoveSPITType::OPFLAG: { - m_OPPart = new RemoveSPITType(m_Header); + m_OPPart = make_unique(move(header)); } break; - // SPITObject case ReportSPITObject::OPFLAG: { - m_OPPart = new ReportSPITObject(m_Header); + m_OPPart = make_unique(move(header)); } break; case RemoveSPITObject::OPFLAG: { - m_OPPart = new RemoveSPITObject(m_Header); + m_OPPart = make_unique(move(header)); } break; // PlaySPITObjects case PlaySPITStart::OPFLAG: { - m_OPPart = new PlaySPITStart(m_Header); + m_OPPart = make_unique(move(header)); } break; case PlaySPITObject::OPFLAG: { - m_OPPart = new PlaySPITObject(m_Header); + m_OPPart = make_unique(move(header)); } break; case PlaySPITEnd::OPFLAG: { - m_OPPart = new PlaySPITEnd(m_Header); + m_OPPart = make_unique(move(header)); } break; case ReportPlayStatus::OPFLAG: { - m_OPPart = new ReportPlayStatus(m_Header); + m_OPPart = make_unique(move(header)); } break; default: - m_OPPart = nullptr; - break; + return false; } - if (m_OPPart != nullptr) { - if (m_OPPart->parse(m_MessageBytes, m_MessageByteCount) == false) { - delete m_OPPart; - m_Header = nullptr; - m_OPPart = nullptr; - return nullptr; - } - } - return m_OPPart; + + return m_OPPart->parse(m_MessageBytes); } //---------- Send ---------- -SPIT_Message::SPIT_Message(OPPart *p_OPPart) { - if (p_OPPart == nullptr) +SPIT_Message::SPIT_Message(unique_ptr p_OPPart) { + if (!p_OPPart) { return; - m_OPPart = p_OPPart; - m_Header = m_OPPart->getHeader(); - if (m_Header == nullptr) { + } + m_OPPart = move(p_OPPart); + if (!m_OPPart->getHeader()) { m_OPPart = nullptr; return; } @@ -151,28 +127,26 @@ bool SPIT_Message::fillBytes() { if (m_OPPart == nullptr) return false; try { - if (m_MessageBytes == nullptr) - m_MessageBytes = createByteArray(*m_OPPart, &m_MessageByteCount); - if (m_MessageBytes == nullptr) - return false; - m_MessageBytesCreated = true; - return m_OPPart->fillBytes(m_MessageBytes, m_MessageByteCount); + if (m_MessageBytes.empty()) { + int totalSize = Header::BYTESLENGTH + m_OPPart->getBytesCount(); + std::vector buffer(totalSize); + } + return m_OPPart->fillBytes(m_MessageBytes); } catch (...) { + ESP_LOGE(TAG, "Failed to allocate memory"); return false; } return true; } -const char *SPIT_Message::getMessageBytes() { +const std::vector *SPIT_Message::getMessageBytes() { if (m_OPPart == nullptr) return nullptr; if (fillBytes() == false) return nullptr; - return m_MessageBytes; + return &m_MessageBytes; } //----------- Header ----------- -SPIT_Message::Header::~Header() { -} SPIT_Message::Header::Header(const Header &orig) { m_SPITID = &SPITID[0]; m_MessageNumber = orig.getMessageNumber(); @@ -184,32 +158,30 @@ SPIT_Message::Header::Header() { m_SPITID = &SPITID[0]; } -bool SPIT_Message::Header::parse(char *msgByts, int msgLen) { - if (!msgByts) { - return false; - } +bool SPIT_Message::Header::parse(const std::vector &message) { try { m_ParseOffset = 0; - auto strID = getString(msgByts, msgLen, m_ParseOffset, 7).value(); + auto strID = getString(message, m_ParseOffset, 7).value(); if (strID != SPITID) { return false; } - auto iVer = getInt(msgByts, msgLen, m_ParseOffset).value(); + auto iVer = getInt(message, m_ParseOffset).value(); if (iVer < 0) { return false; } - m_MessageNumber = getByte(msgByts, msgLen, m_ParseOffset).value(); - m_BytesCount = getInt(msgByts, msgLen, m_ParseOffset).value(); + m_MessageNumber = getByte(message, m_ParseOffset).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); if (m_BytesCount < 0) { return false; } - m_ServerID = getString(msgByts, msgLen, m_ParseOffset, 41).value(); - m_ClientID = getString(msgByts, msgLen, m_ParseOffset, 41).value(); - m_OPFlag = msgByts[m_ParseOffset++] & 0xFF; + 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 message"); return false; } - return true; + return true; } // Send @@ -219,94 +191,53 @@ SPIT_Message::Header::Header(int p_SPITVersion, int p_OPFlag) { m_OPFlag = p_OPFlag; } -void SPIT_Message::Header::setMessageNumber(unsigned char p_MessageNumber) { - m_MessageNumber = p_MessageNumber; -} - -void SPIT_Message::Header::setServerID(string p_ID) { - m_ServerID = p_ID; -} -void SPIT_Message::Header::setClientID(string p_ID) { - m_ClientID = p_ID; -} -void SPIT_Message::Header::setOPFlag(int p_OPFlag) { - m_OPFlag = p_OPFlag; -} -bool SPIT_Message::Header::fillBytes(char *p_Bytes, int p_ByteCount) { - if (p_Bytes == nullptr) - return false; +bool SPIT_Message::Header::fillBytes(std::vector &message) { try { m_ParseOffset = 0; - m_ParseOffset += setString(m_SPITID, p_Bytes, p_ByteCount, m_ParseOffset, 7); - m_ParseOffset += setInt(SPITVERSION, p_Bytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setByte(m_MessageNumber, p_Bytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setInt(m_BytesCount, p_Bytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_ServerID, p_Bytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setString(m_ClientID, p_Bytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setByte(m_OPFlag, p_Bytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; } //----------- OPPart ----------- -SPIT_Message::OPPart::~OPPart() { - if (m_Header != nullptr) { - delete m_Header; - } - m_Header = nullptr; -} -void SPIT_Message::OPPart::initMembers() { - m_Header = nullptr; - m_ParseOffset = 0; - m_BytesCount = 0; -} // Receive -SPIT_Message::OPPart::OPPart(Header *p_Header, int p_OPFlag) { - initMembers(); - m_Header = p_Header; - if (m_Header != nullptr) { +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(Header *p_Header) { - m_Header = p_Header; +void SPIT_Message::OPPart::setHeader(unique_ptr
p_Header) { + m_Header = move(p_Header); if (m_Header != nullptr) { m_ParseOffset = Header::BYTESLENGTH; } } // Send -SPIT_Message::OPPart::OPPart() { - initMembers(); -} +SPIT_Message::OPPart::OPPart(int size) + : m_BytesCount(size) {} //--------------------------- Connection -------------------------------- - //----------- Connect ----------- -SPIT_Message::Connect::~Connect() { -} // Receive -SPIT_Message::Connect::Connect(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::Connect::Connect(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -void SPIT_Message::Connect::initMembers() { - m_ClientComputerName = ""; - m_ClientName = ""; - m_LoginName = ""; - m_LoginPassword = ""; - m_ServerIP = ""; - m_ServerPort = 0; - m_BytesCount = BYTESLENGTH; -} - -bool SPIT_Message::Connect::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::Connect::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -314,63 +245,49 @@ bool SPIT_Message::Connect::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ClientComputerName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_ClientName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_LoginName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_LoginPassword = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_ServerIP = getString(msgBytes, p_ByteCount, m_ParseOffset, 40).value(); - m_ServerPort = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + 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 message"); return false; } return true; } // Send -SPIT_Message::Connect::Connect() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::Connect::Connect(string p_ComputerName, string p_ClientName) + : OPPart(BYTESLENGTH), + m_ClientComputerName(p_ComputerName), + m_ClientName(p_ClientName) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::Connect::setClientComputerName(string p_ComputerName) { - m_ClientComputerName = p_ComputerName; -} -void SPIT_Message::Connect::setClientName(string p_ClientName) { - m_ClientName = p_ClientName; -} -void SPIT_Message::Connect::setLoginName(string p_LoginName) { - m_LoginName = p_LoginName; -} -void SPIT_Message::Connect::setLoginPassword(string p_LoginPassword) { - m_LoginPassword = p_LoginPassword; -} -void SPIT_Message::Connect::setServerIP(string p_ServerIP) { - m_ServerIP = p_ServerIP; -} 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(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::Connect::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_ClientComputerName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setString(m_ClientName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setString(m_LoginName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setString(m_LoginPassword, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setString(m_ServerIP, msgBytes, p_ByteCount, m_ParseOffset, 40); - m_ParseOffset += setInt(m_ServerPort, msgBytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; @@ -378,24 +295,10 @@ bool SPIT_Message::Connect::fillBytes(char *msgBytes, int p_ByteCount) { //----------- ConnectAnswer ----------- -void SPIT_Message::ConnectAnswer::initMembers() { - m_ServerComputerName = ""; - m_ServerName = ""; - m_Connected = false; - m_BytesCount = BYTESLENGTH; - m_StepTime = 40; -} -SPIT_Message::ConnectAnswer::~ConnectAnswer() { -} -SPIT_Message::ConnectAnswer::ConnectAnswer(const ConnectAnswer &orig) { -} // Receive -SPIT_Message::ConnectAnswer::ConnectAnswer(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); -} -bool SPIT_Message::ConnectAnswer::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +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 == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -403,53 +306,43 @@ bool SPIT_Message::ConnectAnswer::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ServerComputerName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_ServerName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_StepTime = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Connected = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); + 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 message"); return false; } return true; } // Send -SPIT_Message::ConnectAnswer::ConnectAnswer() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::ConnectAnswer::ConnectAnswer() +: OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::ConnectAnswer::setServerComputerName(string p_ServerComputerName) { - m_ServerComputerName = p_ServerComputerName; -} -void SPIT_Message::ConnectAnswer::setServerName(string p_ServerName) { - m_ServerName = p_ServerName; -} -void SPIT_Message::ConnectAnswer::setConnected(bool p_Connected) { - m_Connected = p_Connected; -} 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(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ConnectAnswer::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_ServerComputerName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setString(m_ServerName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setInt(m_StepTime, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_Connected, msgBytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; @@ -457,18 +350,10 @@ bool SPIT_Message::ConnectAnswer::fillBytes(char *msgBytes, int p_ByteCount) { //----------- Disconnect ----------- -void SPIT_Message::Disconnect::initMembers() { - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::Disconnect::~Disconnect() { -} // Receive -SPIT_Message::Disconnect::Disconnect(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::Disconnect::Disconnect(unique_ptr
p_Header) : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::Disconnect::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::Disconnect::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -476,51 +361,41 @@ bool SPIT_Message::Disconnect::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::Disconnect::Disconnect() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::Disconnect::Disconnect() : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); } -bool SPIT_Message::Disconnect::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::Disconnect::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); + setInt(m_BytesCount, message, m_ParseOffset); m_ParseOffset += 4; } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; } //----------- Watchdog ----------- -void SPIT_Message::Watchdog::initMembers() { - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::Watchdog::~Watchdog() { -} - // Receive -SPIT_Message::Watchdog::Watchdog(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::Watchdog::Watchdog(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::Watchdog::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::Watchdog::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -528,32 +403,30 @@ bool SPIT_Message::Watchdog::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::Watchdog::Watchdog() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::Watchdog::Watchdog() : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -bool SPIT_Message::Watchdog::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::Watchdog::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); + setInt(m_BytesCount, message, m_ParseOffset); m_ParseOffset += 4; } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -561,19 +434,10 @@ bool SPIT_Message::Watchdog::fillBytes(char *msgBytes, int p_ByteCount) { //----------- WatchdogAnswer ----------- -void SPIT_Message::WatchdogAnswer::initMembers() { - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::WatchdogAnswer::~WatchdogAnswer() { -} - // Receive -SPIT_Message::WatchdogAnswer::WatchdogAnswer(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::WatchdogAnswer::WatchdogAnswer(unique_ptr
p_Header) : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::WatchdogAnswer::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::WatchdogAnswer::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -581,32 +445,30 @@ bool SPIT_Message::WatchdogAnswer::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::WatchdogAnswer::WatchdogAnswer() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::WatchdogAnswer::WatchdogAnswer() : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -bool SPIT_Message::WatchdogAnswer::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::WatchdogAnswer::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); + setInt(m_BytesCount, message, m_ParseOffset); m_ParseOffset += 4; } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -615,21 +477,11 @@ bool SPIT_Message::WatchdogAnswer::fillBytes(char *msgBytes, int p_ByteCount) { //--------------------------- SPITProject -------------------------------- //----------- ReportSPITProject ----------- -void SPIT_Message::ReportSPITProject::initMembers() { - m_ProjectID = ""; - m_ProjectName = ""; - m_BytesCount = BYTESLENGTH; - m_FramesPerSecond = 1000; -} -SPIT_Message::ReportSPITProject::~ReportSPITProject() { -} // Receive -SPIT_Message::ReportSPITProject::ReportSPITProject(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::ReportSPITProject::ReportSPITProject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::ReportSPITProject::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ReportSPITProject::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -637,46 +489,38 @@ bool SPIT_Message::ReportSPITProject::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ProjectID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); - m_ProjectName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_FramesPerSecond = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + 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 message"); return false; } return true; } // Send -SPIT_Message::ReportSPITProject::ReportSPITProject() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::ReportSPITProject::ReportSPITProject(string p_ProjectID, string p_ProjectName) + : OPPart(BYTESLENGTH), + m_ProjectID(p_ProjectID), + m_ProjectName(p_ProjectName) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::ReportSPITProject::setProjectID(string p_ProjectID) { - m_ProjectID = p_ProjectID; -} -void SPIT_Message::ReportSPITProject::setProjectName(string p_ProjectName) { - m_ProjectName = p_ProjectName; -} -void SPIT_Message::ReportSPITProject::setFramesPerSecond(const int p_FramesPerSecond) { - m_FramesPerSecond = p_FramesPerSecond; -} -bool SPIT_Message::ReportSPITProject::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ReportSPITProject::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_ProjectID, msgBytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setString(m_ProjectName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setInt(m_FramesPerSecond, msgBytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; @@ -684,19 +528,11 @@ bool SPIT_Message::ReportSPITProject::fillBytes(char *msgBytes, int p_ByteCount) //----------- StartProjectTransfer ----------- -void SPIT_Message::CloseSPITProject::initMembers() { - m_ProjectID = ""; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::CloseSPITProject::~CloseSPITProject() { -} // Receive -SPIT_Message::CloseSPITProject::CloseSPITProject(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::CloseSPITProject::CloseSPITProject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::CloseSPITProject::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::CloseSPITProject::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -704,36 +540,33 @@ bool SPIT_Message::CloseSPITProject::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ProjectID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); + m_ProjectID = getString(message, m_ParseOffset, 41).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::CloseSPITProject::CloseSPITProject() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::CloseSPITProject::CloseSPITProject(string projectID) + : OPPart(BYTESLENGTH), + m_ProjectID(projectID) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::CloseSPITProject::setProjectID(string p_ProjectID) { - m_ProjectID = p_ProjectID; -} -bool SPIT_Message::CloseSPITProject::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::CloseSPITProject::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_ProjectID, msgBytes, p_ByteCount, m_ParseOffset, 41); + m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); + m_ParseOffset += setString(m_ProjectID, message, m_ParseOffset, 41); } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -741,18 +574,11 @@ bool SPIT_Message::CloseSPITProject::fillBytes(char *msgBytes, int p_ByteCount) //----------- RequestProjectTransfer ----------- -void SPIT_Message::RequestProjectTransfer::initMembers() { - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::RequestProjectTransfer::~RequestProjectTransfer() { -} // Receive -SPIT_Message::RequestProjectTransfer::RequestProjectTransfer(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::RequestProjectTransfer::RequestProjectTransfer(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::RequestProjectTransfer::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::RequestProjectTransfer::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -760,30 +586,29 @@ bool SPIT_Message::RequestProjectTransfer::parse(char *msgBytes, int p_ByteCount return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::RequestProjectTransfer::RequestProjectTransfer() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::RequestProjectTransfer::RequestProjectTransfer() + : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -bool SPIT_Message::RequestProjectTransfer::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::RequestProjectTransfer::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); + m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -791,18 +616,11 @@ bool SPIT_Message::RequestProjectTransfer::fillBytes(char *msgBytes, int p_ByteC //----------- StartProjectTransfer ----------- -void SPIT_Message::StartProjectTransfer::initMembers() { - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::StartProjectTransfer::~StartProjectTransfer() { -} // Receive -SPIT_Message::StartProjectTransfer::StartProjectTransfer(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::StartProjectTransfer::StartProjectTransfer(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::StartProjectTransfer::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::StartProjectTransfer::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -810,31 +628,30 @@ bool SPIT_Message::StartProjectTransfer::parse(char *msgBytes, int p_ByteCount) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::StartProjectTransfer::StartProjectTransfer() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::StartProjectTransfer::StartProjectTransfer() + : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -bool SPIT_Message::StartProjectTransfer::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::StartProjectTransfer::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); + m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -842,18 +659,11 @@ bool SPIT_Message::StartProjectTransfer::fillBytes(char *msgBytes, int p_ByteCou //----------- ENdProjectTransfer ----------- -void SPIT_Message::EndProjectTransfer::initMembers() { - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::EndProjectTransfer::~EndProjectTransfer() { -} // Receive -SPIT_Message::EndProjectTransfer::EndProjectTransfer(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::EndProjectTransfer::EndProjectTransfer(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::EndProjectTransfer::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::EndProjectTransfer::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -861,30 +671,29 @@ bool SPIT_Message::EndProjectTransfer::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::EndProjectTransfer::EndProjectTransfer() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::EndProjectTransfer::EndProjectTransfer() + : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -bool SPIT_Message::EndProjectTransfer::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::EndProjectTransfer::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); + m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -894,27 +703,11 @@ bool SPIT_Message::EndProjectTransfer::fillBytes(char *msgBytes, int p_ByteCount //----------- ReportSPITType ----------- -void SPIT_Message::ReportSPITType::initMembers() { - m_Confirmed = false; - m_SPITTypeID = ""; - m_Fixed = false; - m_ServerRemote = false; - m_ServerProjectIndepended = false; - m_SPITTypeGroupName = ""; - m_SPITTypeName = ""; - m_Delay = 0; - m_Duration = 0; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::ReportSPITType::~ReportSPITType() { -} // Receive -SPIT_Message::ReportSPITType::ReportSPITType(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::ReportSPITType::ReportSPITType(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::ReportSPITType::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ReportSPITType::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -922,76 +715,48 @@ bool SPIT_Message::ReportSPITType::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Confirmed = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_SPITTypeID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); - m_Fixed = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ServerRemote = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ServerProjectIndepended = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_SPITTypeGroupName = getString(msgBytes, p_ByteCount, m_ParseOffset, 39).value(); - m_SPITTypeName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_Delay = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Duration = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); + 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 message"); return false; } return true; } // Send -SPIT_Message::ReportSPITType::ReportSPITType() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::ReportSPITType::ReportSPITType() + : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::ReportSPITType::setConfirmed(bool p_Confirmed) { - m_Confirmed = p_Confirmed; -} -void SPIT_Message::ReportSPITType::setID(string p_ID) { - m_SPITTypeID = p_ID; -} -void SPIT_Message::ReportSPITType::setFixed(bool p_Fixed) { - m_Fixed = p_Fixed; -} -void SPIT_Message::ReportSPITType::setServerRemote(bool p_IsServerRemote) { - m_ServerRemote = p_IsServerRemote; -} -void SPIT_Message::ReportSPITType::setServerProjectIndepended(bool p_ProjectIndpended) { - m_ServerProjectIndepended = p_ProjectIndpended; -} -void SPIT_Message::ReportSPITType::setGroupName(string p_GroupName) { - m_SPITTypeGroupName = p_GroupName; -} -void SPIT_Message::ReportSPITType::setName(string p_Name) { - m_SPITTypeName = p_Name; -} -void SPIT_Message::ReportSPITType::setDelay(long long p_Delay) { - m_Delay = p_Delay; -} -void SPIT_Message::ReportSPITType::setDuration(long long p_Duration) { - m_Duration = p_Duration; -} -bool SPIT_Message::ReportSPITType::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ReportSPITType::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = m_Header->BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_Confirmed, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_SPITTypeID, msgBytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setBoolean(m_Fixed, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_ServerRemote, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_ServerProjectIndepended, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_SPITTypeGroupName, msgBytes, p_ByteCount, m_ParseOffset, 39); - m_ParseOffset += setString(m_SPITTypeName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setLong(m_Delay, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setLong(m_Duration, msgBytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; @@ -999,19 +764,11 @@ bool SPIT_Message::ReportSPITType::fillBytes(char *msgBytes, int p_ByteCount) { //----------- ReportSPITType ----------- -void SPIT_Message::RemoveSPITType::initMembers() { - m_SPITTypeID = ""; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::RemoveSPITType::~RemoveSPITType() { -} // Receive -SPIT_Message::RemoveSPITType::RemoveSPITType(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::RemoveSPITType::RemoveSPITType(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::RemoveSPITType::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::RemoveSPITType::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -1019,36 +776,32 @@ bool SPIT_Message::RemoveSPITType::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_SPITTypeID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); + m_SPITTypeID = getString(message, m_ParseOffset, 41).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::RemoveSPITType::RemoveSPITType() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::RemoveSPITType::RemoveSPITType() + : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::RemoveSPITType::setID(string p_ID) { - m_SPITTypeID = p_ID; -} -bool SPIT_Message::RemoveSPITType::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::RemoveSPITType::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_SPITTypeID, msgBytes, p_ByteCount, m_ParseOffset, 41); + m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); + m_ParseOffset += setString(m_SPITTypeID, message, m_ParseOffset, 41); } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -1057,36 +810,11 @@ bool SPIT_Message::RemoveSPITType::fillBytes(char *msgBytes, int p_ByteCount) { //---------------------------- SPITObjects ---------------------------------- //----------- ReportSPITObject ----------- -void SPIT_Message::ReportSPITObject::initMembers() { - m_Confirmed = false; - m_SPITObjectID = ""; - m_Fixed = false; - m_ServerRemote = false; - m_SPITObjectName = ""; - m_SPITTypeID = ""; - m_ServerParams = ""; - m_FrameStart = 0; - m_FrameLength = 0; - m_FrameFadeInLength = 0; - m_FrameFadeOutLength = 0; - m_ValueFactor = 0; - m_ValueUse = VALUEUSE_DISCARD; - m_Track = 0; - m_Remark = ""; - m_Delay = 0; - m_Duration = 0; - m_ActionAssigned = false; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::ReportSPITObject::~ReportSPITObject() { -} // Receive -SPIT_Message::ReportSPITObject::ReportSPITObject(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::ReportSPITObject::ReportSPITObject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::ReportSPITObject::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ReportSPITObject::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -1094,83 +822,37 @@ bool SPIT_Message::ReportSPITObject::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Confirmed = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_SPITObjectID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); - m_Fixed = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ServerRemote = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_SPITObjectName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_SPITTypeID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); - m_ServerParams = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_FrameStart = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_FrameLength = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_FrameFadeInLength = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_FrameFadeOutLength = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ValueFactor = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ValueUse = getByte(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Track = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Remark = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_Delay = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Duration = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ActionAssigned = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); + 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 message"); return false; } return true; } // Send -SPIT_Message::ReportSPITObject::ReportSPITObject() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::ReportSPITObject::ReportSPITObject() : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::ReportSPITObject::setConfirmed(bool p_Confirmed) { - m_Confirmed = p_Confirmed; -} -void SPIT_Message::ReportSPITObject::setID(string p_ID) { - m_SPITObjectID = p_ID; -} -void SPIT_Message::ReportSPITObject::setFixed(bool p_Fixed) { - m_Fixed = p_Fixed; -} -void SPIT_Message::ReportSPITObject::setServerRemote(bool p_IsRemote) { - m_ServerRemote = p_IsRemote; -} -void SPIT_Message::ReportSPITObject::setName(string p_Name) { - m_SPITObjectName = p_Name; -} -void SPIT_Message::ReportSPITObject::setSPITTypeID(string p_ID) { - m_SPITTypeID = p_ID; -} -void SPIT_Message::ReportSPITObject::setServerParams(string p_Parameters) { - m_ServerParams = p_Parameters; -} -void SPIT_Message::ReportSPITObject::setFrameStart(long long p_StartTime) { - m_FrameStart = p_StartTime; -} -void SPIT_Message::ReportSPITObject::setFrameLength(long long p_Length) { - m_FrameLength = p_Length; -} -void SPIT_Message::ReportSPITObject::setFrameFadeInLength(long long p_FadeInTime) { - m_FrameFadeInLength = p_FadeInTime; -} -void SPIT_Message::ReportSPITObject::setFrameFadeOutLength(long long p_FadeOutTime) { - m_FrameFadeOutLength = p_FadeOutTime; -} -void SPIT_Message::ReportSPITObject::setValueFactor(int p_Volume) { - m_ValueFactor = p_Volume; -} -void SPIT_Message::ReportSPITObject::setValueUse(char p_ValueUse) { - m_ValueUse = p_ValueUse; -} -void SPIT_Message::ReportSPITObject::setTrack(int p_Track) { - m_Track = p_Track; -} -void SPIT_Message::ReportSPITObject::setRemark(string p_Description) { - m_Remark = p_Description; -} void SPIT_Message::ReportSPITObject::setDelay(long long p_Delay) { if (p_Delay < 0) p_Delay = 0; @@ -1182,57 +864,45 @@ void SPIT_Message::ReportSPITObject::setDuration(long long p_Duration) { m_Duration = p_Duration; } -void SPIT_Message::ReportSPITObject::setActionAssigned(bool p_ActionAssigned) { - m_ActionAssigned = p_ActionAssigned; -} -bool SPIT_Message::ReportSPITObject::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ReportSPITObject::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_Confirmed, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_SPITObjectID, msgBytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setBoolean(m_Fixed, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_ServerRemote, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_SPITObjectName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setString(m_SPITTypeID, msgBytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setString(m_ServerParams, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setLong(m_FrameStart, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setLong(m_FrameLength, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setLong(m_FrameFadeInLength, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setLong(m_FrameFadeOutLength, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setInt(m_ValueFactor, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setByte(m_ValueUse, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setInt(m_Track, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_Remark, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setLong(m_Delay, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setLong(m_Duration, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_ActionAssigned, msgBytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; } //----------- RemoveSPITObject ----------- -void SPIT_Message::RemoveSPITObject::initMembers() { - m_SPITObjectID = ""; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::RemoveSPITObject::~RemoveSPITObject() { -} // Receive -SPIT_Message::RemoveSPITObject::RemoveSPITObject(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::RemoveSPITObject::RemoveSPITObject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::RemoveSPITObject::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::RemoveSPITObject::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -1240,37 +910,32 @@ bool SPIT_Message::RemoveSPITObject::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_SPITObjectID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); + m_SPITObjectID = getString(message, m_ParseOffset, 41).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::RemoveSPITObject::RemoveSPITObject() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::RemoveSPITObject::RemoveSPITObject() : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::RemoveSPITObject::setID(string p_ID) { - m_SPITObjectID = p_ID; -} -bool SPIT_Message::RemoveSPITObject::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::RemoveSPITObject::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_SPITObjectID, msgBytes, p_ByteCount, m_ParseOffset, 41); + m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); + m_ParseOffset += setString(m_SPITObjectID, message, m_ParseOffset, 41); } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -1279,23 +944,11 @@ bool SPIT_Message::RemoveSPITObject::fillBytes(char *msgBytes, int p_ByteCount) //---------------------------- SPITPlayer ---------------------------------- //----------- PlaySPITStart ----------- -void SPIT_Message::PlaySPITStart::initMembers() { - m_PlayerID = ""; - m_PlayerName = ""; - m_PlayerType = 0x00; - m_Time = 0; - m_PlayerIsRunning = false; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::PlaySPITStart::~PlaySPITStart() { -} // Receive -SPIT_Message::PlaySPITStart::PlaySPITStart(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::PlaySPITStart::PlaySPITStart(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::PlaySPITStart::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::PlaySPITStart::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -1303,57 +956,44 @@ bool SPIT_Message::PlaySPITStart::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_PlayerID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); - m_PlayerName = getString(msgBytes, p_ByteCount, m_ParseOffset, 64).value(); - m_PlayerType = getByte(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_PlayerIsRunning = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Time = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); + 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 message"); return false; } return true; } // Send -SPIT_Message::PlaySPITStart::PlaySPITStart() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +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(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::PlaySPITStart::setPlayerID(string p_PlayerID) { - m_PlayerID = p_PlayerID; -} -void SPIT_Message::PlaySPITStart::setPlayerName(string p_PlayerName) { - m_PlayerName = p_PlayerName; -} -void SPIT_Message::PlaySPITStart::setPlayerType(char p_PlayerType) { - m_PlayerType = p_PlayerType; -} -void SPIT_Message::PlaySPITStart::setPlayerIsRunning(bool p_IsPlaying) { - m_PlayerIsRunning = p_IsPlaying; -} -void SPIT_Message::PlaySPITStart::setTime(long long p_Time) { - m_Time = p_Time; -} -bool SPIT_Message::PlaySPITStart::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::PlaySPITStart::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_PlayerID, msgBytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setString(m_PlayerName, msgBytes, p_ByteCount, m_ParseOffset, 64); - m_ParseOffset += setByte(m_PlayerType, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_PlayerIsRunning, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setLong(m_Time, msgBytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; @@ -1361,23 +1001,11 @@ bool SPIT_Message::PlaySPITStart::fillBytes(char *msgBytes, int p_ByteCount) { //----------- PlaySPITObject ----------- -void SPIT_Message::PlaySPITObject::initMembers() { - m_PlayerID = ""; - m_SPITObjectID = ""; - m_FrameInsideObject = 0; - m_Value = 0; - m_ValueFlag = VALUEFLAG_DIRECT; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::PlaySPITObject::~PlaySPITObject() { -} // Receive -SPIT_Message::PlaySPITObject::PlaySPITObject(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::PlaySPITObject::PlaySPITObject(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::PlaySPITObject::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::PlaySPITObject::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -1385,60 +1013,41 @@ bool SPIT_Message::PlaySPITObject::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_PlayerID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); - m_SPITObjectID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); - m_FrameInsideObject = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_PlayPrePosition = getBoolean(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Value = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_ValueFlag = getByte(msgBytes, p_ByteCount, m_ParseOffset).value(); + 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 message"); return false; } return true; } // Send -SPIT_Message::PlaySPITObject::PlaySPITObject() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::PlaySPITObject::PlaySPITObject() + : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::PlaySPITObject::setPlayerID(string p_PlayerID) { - m_PlayerID = p_PlayerID; -} -void SPIT_Message::PlaySPITObject::setID(string p_ID) { - m_SPITObjectID = p_ID; -} -void SPIT_Message::PlaySPITObject::setFrameInsideObject(long long p_TimeInside) { - m_FrameInsideObject = p_TimeInside; -} -void SPIT_Message::PlaySPITObject::setPlayPrePosition(bool p_PlayOldPosition) { - m_PlayPrePosition = p_PlayOldPosition; -} -void SPIT_Message::PlaySPITObject::setValue(int p_Value) { - m_Value = p_Value; -} -void SPIT_Message::PlaySPITObject::setValueFlag(char p_ValueFlag) { - m_ValueFlag = p_ValueFlag; -} -bool SPIT_Message::PlaySPITObject::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::PlaySPITObject::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_PlayerID, msgBytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setString(m_SPITObjectID, msgBytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setLong(m_FrameInsideObject, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setBoolean(m_PlayPrePosition, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setInt(m_Value, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setByte(m_ValueFlag, msgBytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; @@ -1446,19 +1055,11 @@ bool SPIT_Message::PlaySPITObject::fillBytes(char *msgBytes, int p_ByteCount) { //----------- PlaySPITEnd ----------- -void SPIT_Message::PlaySPITEnd::initMembers() { - m_PlayerID = ""; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::PlaySPITEnd::~PlaySPITEnd() { -} // Receive -SPIT_Message::PlaySPITEnd::PlaySPITEnd(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::PlaySPITEnd::PlaySPITEnd(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::PlaySPITEnd::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::PlaySPITEnd::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -1466,36 +1067,33 @@ bool SPIT_Message::PlaySPITEnd::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_PlayerID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); + m_BytesCount = getInt(message, m_ParseOffset).value(); + m_PlayerID = getString(message, m_ParseOffset, 41).value(); } catch (...) { + ESP_LOGE(TAG, "failed to parse message"); return false; } return true; } // Send -SPIT_Message::PlaySPITEnd::PlaySPITEnd() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::PlaySPITEnd::PlaySPITEnd(string p_PlayerID) + : OPPart(BYTESLENGTH), + m_PlayerID(p_PlayerID) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } -void SPIT_Message::PlaySPITEnd::setPlayerID(string p_PlayerID) { - m_PlayerID = p_PlayerID; -} -bool SPIT_Message::PlaySPITEnd::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::PlaySPITEnd::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_PlayerID, msgBytes, p_ByteCount, m_ParseOffset, 41); + m_ParseOffset += setInt(m_BytesCount, message, m_ParseOffset); + m_ParseOffset += setString(m_PlayerID, message, m_ParseOffset, 41); } catch (...) { + ESP_LOGE(TAG, "failed to create message"); return false; } return true; @@ -1503,21 +1101,11 @@ bool SPIT_Message::PlaySPITEnd::fillBytes(char *msgBytes, int p_ByteCount) { //----------- ReportPlayStatus ----------- -void SPIT_Message::ReportPlayStatus::initMembers() { - m_SPITObjectID = ""; - m_FrameInsideObject = 0; - m_Value = 0; - m_BytesCount = BYTESLENGTH; -} -SPIT_Message::ReportPlayStatus::~ReportPlayStatus() { -} // Receive -SPIT_Message::ReportPlayStatus::ReportPlayStatus(Header *p_Header) : OPPart(p_Header, OPFLAG) { - initMembers(); +SPIT_Message::ReportPlayStatus::ReportPlayStatus(unique_ptr
p_Header) + : OPPart(move(p_Header), OPFLAG, BYTESLENGTH) { } -bool SPIT_Message::ReportPlayStatus::parse(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ReportPlayStatus::parse(const std::vector &message) { if (m_Header == nullptr) return false; int intOPFlag = m_Header->getOPFlag(); @@ -1525,20 +1113,19 @@ bool SPIT_Message::ReportPlayStatus::parse(char *msgBytes, int p_ByteCount) { return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_BytesCount = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_SPITObjectID = getString(msgBytes, p_ByteCount, m_ParseOffset, 41).value(); - m_FrameInsideObject = getLong(msgBytes, p_ByteCount, m_ParseOffset).value(); - m_Value = getInt(msgBytes, p_ByteCount, m_ParseOffset).value(); + 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 message"); return false; } return true; } // Send -SPIT_Message::ReportPlayStatus::ReportPlayStatus() : OPPart() { - initMembers(); - m_Header = new Header(SPITVERSION, OPFLAG); - setHeader(m_Header); +SPIT_Message::ReportPlayStatus::ReportPlayStatus() : OPPart(BYTESLENGTH) { + setHeader(make_unique
(SPITVERSION, OPFLAG)); m_ParseOffset = Header::BYTESLENGTH; } @@ -1551,20 +1138,19 @@ void SPIT_Message::ReportPlayStatus::setFrameInsideObject(long long p_TimeInside void SPIT_Message::ReportPlayStatus::setValue(int p_Value) { m_Value = p_Value; } -bool SPIT_Message::ReportPlayStatus::fillBytes(char *msgBytes, int p_ByteCount) { - if (msgBytes == nullptr) - return false; +bool SPIT_Message::ReportPlayStatus::fillBytes(std::vector &message) { if (m_Header == nullptr) return false; - if (m_Header->fillBytes(msgBytes, p_ByteCount) == false) + if (m_Header->fillBytes(message) == false) return false; try { m_ParseOffset = Header::BYTESLENGTH; - m_ParseOffset += setInt(m_BytesCount, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setString(m_SPITObjectID, msgBytes, p_ByteCount, m_ParseOffset, 41); - m_ParseOffset += setLong(m_FrameInsideObject, msgBytes, p_ByteCount, m_ParseOffset); - m_ParseOffset += setInt(m_Value, msgBytes, p_ByteCount, m_ParseOffset); + 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 message"); return false; } return true; @@ -1582,159 +1168,148 @@ bool SPIT_Message::isSystemLittleEndian() { return true; } -optional SPIT_Message::getInt(char *bytes, int size, int &offset) { - if (!bytes || offset < 0 || offset + 4 > size) +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 += ((bytes[offset + 0] & 0x000000ff)); - intValue += ((bytes[offset + 1] & 0x000000ff) << 8); - intValue += ((bytes[offset + 2] & 0x000000ff) << 16); - intValue += ((bytes[offset + 3] & 0x000000ff) << 24); + 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 += ((bytes[offset + 3] & 0x000000ff)); - intValue += ((bytes[offset + 2] & 0x000000ff) << 8); - intValue += ((bytes[offset + 1] & 0x000000ff) << 16); - intValue += ((bytes[offset + 0] & 0x000000ff) << 24); + 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, char *p_Bytes, int p_ByteCount, int p_Offset) { - if (p_Offset < 0) - throw "ParseError_send"; - if (p_Bytes == nullptr || p_ByteCount < p_Offset + 4) +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) { - p_Bytes[p_Offset + 0] = (char)(p_Value & 0x000000ff); - p_Bytes[p_Offset + 1] = (char)((p_Value & 0x0000ff00) >> 8); - p_Bytes[p_Offset + 2] = (char)((p_Value & 0x00ff0000) >> 16); - p_Bytes[p_Offset + 3] = (char)((p_Value & 0xff000000) >> 24); + 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 { - p_Bytes[p_Offset + 3] = (char)(p_Value & 0x000000ff); - p_Bytes[p_Offset + 2] = (char)((p_Value & 0x0000ff00) >> 8); - p_Bytes[p_Offset + 1] = (char)((p_Value & 0x00ff0000) >> 16); - p_Bytes[p_Offset + 0] = (char)((p_Value & 0xff000000) >> 24); + 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(char *bytes, int size, int &offset) { - if (!bytes || offset < 0 || offset + 8 > size) +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)(bytes[offset] & 0x000000ff)); - intValue += ((long long)(bytes[offset + 1] & 0x000000ff) << 8); - intValue += ((long long)(bytes[offset + 2] & 0x000000ff) << 16); - intValue += ((long long)(bytes[offset + 3] & 0x000000ff) << 24); - intValue += ((long long)(bytes[offset + 4] & 0x000000ff) << 32); - intValue += ((long long)(bytes[offset + 5] & 0x000000ff) << 40); - intValue += ((long long)(bytes[offset + 6] & 0x000000ff) << 48); - intValue += ((long long)(bytes[offset + 7] & 0x000000ff) << 56); + 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)(bytes[offset + 7] & 0x000000ff)); - intValue += ((long long)(bytes[offset + 6] & 0x000000ff) << 8); - intValue += ((long long)(bytes[offset + 5] & 0x000000ff) << 16); - intValue += ((long long)(bytes[offset + 4] & 0x000000ff) << 24); - intValue += ((long long)(bytes[offset + 3] & 0x000000ff) << 32); - intValue += ((long long)(bytes[offset + 2] & 0x000000ff) << 40); - intValue += ((long long)(bytes[offset + 1] & 0x000000ff) << 48); - intValue += ((long long)(bytes[offset + 0] & 0x000000ff) << 56); + 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, char *p_Bytes, int p_ByteCount, int p_Offset) { - if (p_Offset < 0) - throw "ParseError_send"; - if (p_Bytes == nullptr || p_ByteCount < p_Offset + 8) +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) { - p_Bytes[p_Offset + 0] = (char)((p_Value & 0x00000000000000ff)); - p_Bytes[p_Offset + 1] = (char)((p_Value & 0x000000000000ff00) >> 8); - p_Bytes[p_Offset + 2] = (char)((p_Value & 0x0000000000ff0000) >> 16); - p_Bytes[p_Offset + 3] = (char)((p_Value & 0x00000000ff000000) >> 24); - p_Bytes[p_Offset + 4] = (char)((p_Value & 0x000000ff00000000) >> 32); - p_Bytes[p_Offset + 5] = (char)((p_Value & 0x0000ff0000000000) >> 40); - p_Bytes[p_Offset + 6] = (char)((p_Value & 0x00ff000000000000) >> 48); - p_Bytes[p_Offset + 7] = (char)((p_Value & 0xff00000000000000) >> 56); + 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 { - p_Bytes[p_Offset + 7] = (char)((p_Value & 0x00000000000000ff)); - p_Bytes[p_Offset + 6] = (char)((p_Value & 0x000000000000ff00) >> 8); - p_Bytes[p_Offset + 5] = (char)((p_Value & 0x0000000000ff0000) >> 16); - p_Bytes[p_Offset + 4] = (char)((p_Value & 0x00000000ff000000) >> 24); - p_Bytes[p_Offset + 3] = (char)((p_Value & 0x000000ff00000000) >> 32); - p_Bytes[p_Offset + 2] = (char)((p_Value & 0x0000ff0000000000) >> 40); - p_Bytes[p_Offset + 1] = (char)((p_Value & 0x00ff000000000000) >> 48); - p_Bytes[p_Offset + 0] = (char)((p_Value & 0xff00000000000000) >> 56); + 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(char *bytes, int size, int &offset) { - if (!bytes || offset < 0 || offset + 1 > size) +optional SPIT_Message::getBoolean(const std::vector &message, int &offset) { + if (offset < 0 || offset + 1 > message.size()) return std::nullopt; - return {bytes[offset++] > 0x00}; + return {message[offset++] > 0x00}; } -int SPIT_Message::setBoolean(bool p_Value, char *p_Bytes, int p_ByteCount, int p_Offset) { - if (p_Offset < 0) - throw "ParseError_send"; - if (p_Bytes == nullptr || p_ByteCount < p_Offset + 1) +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) { - p_Bytes[p_Offset] = 0x00; + message[p_Offset] = 0x00; } else { - p_Bytes[p_Offset] = 0x01; + message[p_Offset] = 0x01; } return 1; } -optional SPIT_Message::getByte(char *bytes, int size, int &offset) { - if (!bytes || offset < 0 || offset + 1 > size) +optional SPIT_Message::getByte(const std::vector &message, int &offset) { + if (offset < 0 || offset + 1 > message.size()) return std::nullopt; - return {bytes[offset++]}; + return {message[offset++]}; } -int SPIT_Message::setByte(int p_Value, char *p_Bytes, int p_ByteCount, int p_Offset) { - if (p_Offset < 0) +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"; - if (p_Bytes == nullptr || p_ByteCount < p_Offset + 1) - throw "ParseError_send"; - p_Bytes[p_Offset] = (char)(p_Value & 0xff); + + message[p_Offset] = (char)(p_Value & 0xff); return 1; } -optional SPIT_Message::getString(char *bytes, int size, int &offset, int maxLength) { - if (!bytes || offset < 0 || offset + maxLength > size) +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(&bytes[offset], maxLength); + size_t len = strnlen(&message[offset], maxLength); if (len >= maxLength) return std::nullopt; - string str(&bytes[offset], len); + string str(&message[offset], len); offset += maxLength; return str; } -int SPIT_Message::setString(string p_String, char *p_Bytes, int p_ByteCount, int offset, int maxLength) { - if (offset < 0) - throw "ParseError_send"; - int intChar = 0; - bool boolNullChar = false; - if (maxLength < 1) - throw "ParseError_send"; - if (p_Bytes == nullptr || p_ByteCount < offset + maxLength) +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; @@ -1743,8 +1318,10 @@ int SPIT_Message::setString(string p_String, char *p_Bytes, int p_ByteCount, int } else { intLength = p_String.length() + 1; } + int intChar = 0; + bool boolNullChar = false; while (intChar < intLength) { - p_Bytes[offset + intChar] = p_String.data()[intChar]; + message[offset + intChar] = p_String.data()[intChar]; if (p_String[intChar] == '\0') { boolNullChar = true; break; @@ -1752,22 +1329,7 @@ int SPIT_Message::setString(string p_String, char *p_Bytes, int p_ByteCount, int intChar++; } if (boolNullChar == false) { - p_Bytes[offset + intLength - 1] = '\0'; + message[offset + intLength - 1] = '\0'; } return maxLength; } - -char *SPIT_Message::createByteArray(const OPPart &p_OPPart, int *p_ByteCount) { - int intBytesCount = 0; - char *o_ByteArray; - try { - intBytesCount = Header::BYTESLENGTH; - intBytesCount += p_OPPart.getBytesCount(); - o_ByteArray = (char *)malloc(intBytesCount); - *p_ByteCount = intBytesCount; - } catch (...) { - return nullptr; - ESP_LOGE(TAG, "Failed to allocate memory"); - } - return o_ByteArray; -}