diff --git a/components/spit/include/spit_client.hpp b/components/spit/include/spit_client.hpp
index 8d9f24f..3c4a22c 100644
--- a/components/spit/include/spit_client.hpp
+++ b/components/spit/include/spit_client.hpp
@@ -3,6 +3,7 @@
#include "sad_DetectedServer.hpp"
#include "spit_object.hpp"
#include "spit_player.hpp"
+#include "spit_processor.hpp"
#include "spit_socket.hpp"
#include "spit_type.hpp"
#include "spit_message.hpp"
@@ -21,42 +22,11 @@ class SClient : ISadClient {
/** Maximal length of a SPITMessage*/
static const int MAXSPITMESSAGEBYTECOUNT = 512;
- enum class ProjUpdate {
- ServerLoaded,
- StartTransfer,
- EndTransfer,
- ServerClosed,
- };
- enum class ServerEvent {
- Detect,
- Lost,
- Changed,
- };
- enum class ObjectEvent {
- Created,
- Changed,
- Deleted
- };
- enum class Connection {
- None = 0, // No Connection established.
Either no connect tried or disconnected
- NoneServer = 1, // Server has disconnected
- Lost = 2, // The connection is lost
Either because of a network crash or because the server no longer responds.
- Ok = 3, // Connection to the serv er is established.
- TryConnection = 4, // A connection to the server is tried.
- };
-
- struct Callbacks {
- function onServerEvent;
- function onConnectionStatus;
- function onProjectUpdate;
- function onSpitType;
- function onSpitObject;
- function onPlay;
- function onPlaySpitType;
- function onPlayRemoteObjectStatus;
- function onCheckSpitTypeVeto;
- function onCheckSpitObjectVeto;
- };
+ using Callbacks = SProcessor::Callbacks;
+ using ProjUpdate = SProcessor::ProjUpdate;
+ using ServerEvent = SProcessor::ServerEvent;
+ using ObjectEvent = SProcessor::ObjectEvent;
+ using Connection = SProcessor::Connection;
//------ PlayerType ------
public:
@@ -96,6 +66,7 @@ class SClient : ISadClient {
string mName;
string mProjName;
string mComputerName;
+ SProcessor mProcessor;
string mClientProjectName;
@@ -327,8 +298,6 @@ class SClient : ISadClient {
SpitRepo mSpitObjects;
SpitRepo mRemoteSpitObjects;
- SpitRepo mSpitTypes;
- SpitRepo mRemoteSpitTypes;
};
}
\ No newline at end of file
diff --git a/components/spit/include/spit_processor.hpp b/components/spit/include/spit_processor.hpp
index 7b01a1f..b168e7c 100644
--- a/components/spit/include/spit_processor.hpp
+++ b/components/spit/include/spit_processor.hpp
@@ -1,14 +1,14 @@
#pragma once
#include "sad_DetectedServer.hpp"
+#include "spit_message.hpp"
#include "spit_object.hpp"
#include "spit_player.hpp"
-#include "spit_type.hpp"
-#include "spit_message.hpp"
#include "spit_repo.hpp"
+#include "spit_type.hpp"
+#include
#include
#include
-#include
using namespace std;
@@ -16,8 +16,8 @@ namespace spit {
class SProcessor {
public:
- /** Maximal length of a SPITMessage*/
- static const int MAXSPITMESSAGEBYTECOUNT = 512;
+ // /** Maximal length of a SPITMessage*/
+ // static const int MAXSPITMESSAGEBYTECOUNT = 512;
enum class ProjUpdate {
ServerLoaded,
@@ -56,266 +56,271 @@ class SProcessor {
function onCheckSpitObjectVeto;
};
- //------ 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 constexpr char PLAYERTYPE_MAIN = 0x02;
- /** continous player. This player plays SPIT objects sometime during the project.*/
- static constexpr char PLAYERTYPE_CONTINOUS = 0x01;
- /** diescrete player. This player is used to transmit single discrete values.*/
- static constexpr char PLAYERTYPE_DISCRETE = 0x00;
+ struct InternalCallbacks {
+ function sendSpitTypeInternal;
+ };
- //------ Value Flag ------
- //------ used by sendRemoteObject
- public:
- /**Set the given value directly*/
- 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 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 constexpr char VALUEFLAG_DECREASE = 0x02;
- static constexpr int MAX_OVERTAKING_SPIT_MESSAGES = 10;
+ // //------ 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 constexpr char PLAYERTYPE_MAIN = 0x02;
+ // /** continous player. This player plays SPIT objects sometime during the project.*/
+ // static constexpr char PLAYERTYPE_CONTINOUS = 0x01;
+ // /** diescrete player. This player is used to transmit single discrete values.*/
+ // static constexpr char PLAYERTYPE_DISCRETE = 0x00;
+
+ // //------ Value Flag ------
+ // //------ used by sendRemoteObject
+ // public:
+ // /**Set the given value directly*/
+ // 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 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 constexpr char VALUEFLAG_DECREASE = 0x02;
+ // static constexpr int MAX_OVERTAKING_SPIT_MESSAGES = 10;
//----- SProcessor -----
public:
- SProcessor(string name, string projName, string hostName, string guid, Callbacks calls);
+ SProcessor(string name, string projName, string hostName, string guid,
+ Callbacks calls, InternalCallbacks intern);
virtual ~SProcessor();
private:
Callbacks mCallbacks;
+ InternalCallbacks mInternCallbacks;
- Connection mConnectionStatus{Connection::None};
- bool mDisconnectedByServer{}; // flag true = when server disconnects
+ // Connection mConnectionStatus{Connection::None};
+ // bool mDisconnectedByServer{}; // flag true = when server disconnects
string mGuid;
string mName;
string mProjName;
string mComputerName;
- string mClientProjectName;
+ // string mClientProjectName;
- uint8_t mMessageNumberSend{1};
- int mMessageNumberReceived{-1}; // set to -1 because the first received message will set the number (1..255)
- vector> mOvertakingMessages;
+ // uint8_t mMessageNumberSend{1};
+ // int mMessageNumberReceived{-1}; // set to -1 because the first received message will set the number (1..255)
+ // vector> mOvertakingMessages;
- // Server's info filled by parseConnectAnswer
- string mServerID{};
- string mServerName{};
- string mServerComputerName{};
- int mServerStepTime{-1};
+ // // Server's info filled by parseConnectAnswer
+ // string mServerID{};
+ // string mServerName{};
+ // string mServerComputerName{};
+ // int mServerStepTime{-1};
- //--- Server Project ---
- string mServerProjectID;
- string mServerProjectName;
- int mServerFramesPerSecond;
+ // //--- Server Project ---
+ // string mServerProjectID;
+ // string mServerProjectName;
+ // int mServerFramesPerSecond;
- public:
- /** The ID of the client.
Every client instance should set an unique id*/
- string getID() { return mGuid; }
- /** The name of the client, should be set by the user app*/
- string getName() { return mName; }
- //----- Computer Params -----
- /** The name of the client's host computer*/
- string getComputerName() { return mComputerName; }
- void setClientProjectName(string clientProjectName) { mClientProjectName = clientProjectName; }
- string getClientProjectName() { return mClientProjectName; }
+ // public:
+ // /** The ID of the client.
Every client instance should set an unique id*/
+ // string getID() { return mGuid; }
+ // /** The name of the client, should be set by the user app*/
+ // string getName() { return mName; }
+ // //----- Computer Params -----
+ // /** The name of the client's host computer*/
+ // string getComputerName() { return mComputerName; }
+ // void setClientProjectName(string clientProjectName) { mClientProjectName = clientProjectName; }
+ // string getClientProjectName() { return mClientProjectName; }
- // connected Server Infos
- /** The ID of the connected SPITServer*/
- string getServerID() { return mServerID; }
- /** The host computername of the connected SPITServer*/
- string getServerComputerName() { return mServerComputerName; }
- /** The name of the connected SPITServer*/
- string getServerName() { return mServerName; }
+ // // connected Server Infos
+ // /** The ID of the connected SPITServer*/
+ // string getServerID() { return mServerID; }
+ // /** The host computername of the connected SPITServer*/
+ // string getServerComputerName() { return mServerComputerName; }
+ // /** The name of the connected SPITServer*/
+ // string getServerName() { return mServerName; }
- /** Expected Refreah Rate of the connectd SPITServer.
- * When the server plays objects, it will do so at discrete time steps.
- * Play events will take place in these time steps..
- */
- int getServerStepTime() { return mServerStepTime; }
+ // /** Expected Refreah Rate of the connectd SPITServer.
+ // * When the server plays objects, it will do so at discrete time steps.
+ // * Play events will take place in these time steps..
+ // */
+ // int getServerStepTime() { return mServerStepTime; }
- /** Should be called when the client wants to close his project*/
- void clientProjectClose();
- /**
- * Should be called whenever the client has a project loaded
- */
- void clientProjectLoaded();
+ // /** Should be called when the client wants to close his project*/
+ // void clientProjectClose();
+ // /**
+ // * Should be called whenever the client has a project loaded
+ // */
+ // void clientProjectLoaded();
- void setActionSPITType(string spitypeID, bool actionAssigned);
- void setActionSPITObject(string objectID, bool actionAssigned);
+ // void setActionSPITType(string spitypeID, bool actionAssigned);
+ // void setActionSPITObject(string objectID, bool actionAssigned);
- //--------------- SPITMessage ---------------
- private:
- // Reconnect to the server when connection is lost see eventConnectionStatus and eventServerDetected
- bool _doReconnect{}; // true = on eventServerDetected connect to the server identified by mServerID
- public:
- std::vector createMessage(Message::OPPart & spitMessageOPPart);
- void checkParseMessageData(vector data);
+ // //--------------- SPITMessage ---------------
+ // private:
+ // // Reconnect to the server when connection is lost see eventConnectionStatus and eventServerDetected
+ // bool _doReconnect{}; // true = on eventServerDetected connect to the server identified by mServerID
+ // public:
+ // std::vector createMessage(Message::OPPart & spitMessageOPPart);
+ // void checkParseMessageData(vector data);
+ // //--------------- ServerAutoDetection SAD ---------------
+ // public:
+ // /** Starts the autodetection of SPITServers in the local network. If a connection is tried, the autodetection should be stopped before.*/
+ // void startServerAutoDetect();
+ // /** Stops the autodetection of SPITServers in the local network*/
+ // void stopServerAutoDetect();
+ // /** Called every time a new SPITServer is detetced in the local network */
+ // void eventServerDetected(SadDetectedServer &server);
+ // /** Called every time a prior detected SPITServer is is no longer found.*/
+ // void eventServerLost(SadDetectedServer &server);
+ // void eventServerChanged(SadDetectedServer &server);
- //--------------- ServerAutoDetection SAD ---------------
- public:
- /** Starts the autodetection of SPITServers in the local network. If a connection is tried, the autodetection should be stopped before.*/
- void startServerAutoDetect();
- /** Stops the autodetection of SPITServers in the local network*/
- void stopServerAutoDetect();
- /** Called every time a new SPITServer is detetced in the local network */
- void eventServerDetected(SadDetectedServer &server);
- /** Called every time a prior detected SPITServer is is no longer found.*/
- void eventServerLost(SadDetectedServer &server);
- void eventServerChanged(SadDetectedServer &server);
+ // //--------------- Connection ---------------
+ // public:
+ // /**
+ // * Tries a connection to the SPITServer
+ // * @param p_ServerIP ip address of the SPITServer
+ // * @param p_ServerPort port of the SPITServer
+ // * @param p_ClientIP IP of the client
+ // * @param p_ClientPort if "0" any free port will be used
+ // * @param p_LoginName maybe some SPITServer need a login - liveSHOWsoftware will not.
+ // * @param p_LoginPassword maybe some SPITServer need a login - liveSHOWsoftware will not
+ // * @return true = the connection try is ok, SPITServer will answer with COnnectAnswer and an eventConnectionStatus will occur.
+ // * false = something is going wrong. (client could not bind)
+ // */
+ // bool connect(string serverIP, string serverPort, string clientIP, string clientPort, string loginName = "", string loginPassword = "");
+ // /**
+ // * Terminates the connection to the SPITServer.
+ // */
+ // void disconnect();
- //--------------- Connection ---------------
- public:
- /**
- * Tries a connection to the SPITServer
- * @param p_ServerIP ip address of the SPITServer
- * @param p_ServerPort port of the SPITServer
- * @param p_ClientIP IP of the client
- * @param p_ClientPort if "0" any free port will be used
- * @param p_LoginName maybe some SPITServer need a login - liveSHOWsoftware will not.
- * @param p_LoginPassword maybe some SPITServer need a login - liveSHOWsoftware will not
- * @return true = the connection try is ok, SPITServer will answer with COnnectAnswer and an eventConnectionStatus will occur.
- * false = something is going wrong. (client could not bind)
- */
- bool connect(string serverIP, string serverPort, string clientIP, string clientPort, string loginName = "", string loginPassword = "");
- /**
- * Terminates the connection to the SPITServer.
- */
- void disconnect();
-
- private:
- void disconnectInternal(Connection cause);
- void resetMessageNumberReceived();
- void parseMessage(Message& message);
- void addOvertakingMessage(unique_ptr message);
- void parseConnectAnswer(Message::ConnectAnswer &message);
- void parseDisconnect(Message::Disconnect &message);
- void parseWatchdog(Message::Watchdog &message);
- void parseWatchdogAnswer(Message::WatchdogAnswer &message);
+ // private:
+ // void disconnectInternal(Connection cause);
+ // void resetMessageNumberReceived();
+ // void parseMessage(Message& message);
+ // void addOvertakingMessage(unique_ptr message);
+ // void parseConnectAnswer(Message::ConnectAnswer &message);
+ // void parseDisconnect(Message::Disconnect &message);
+ // void parseWatchdog(Message::Watchdog &message);
+ // void parseWatchdogAnswer(Message::WatchdogAnswer &message);
- public:
- /** Used internally*/
- void sendWatchdog();
- /** Used internally. When the connection to the SPITServer is lost an eventConnectionStatus will occur*/
- void eventWatchdogLost();
- //--------------- SPIT Project ---------------
- private:
- void parseReportProject(Message::ReportProject &message);
- void parseCloseProject(Message::CloseProject &message);
+ // public:
+ // /** Used internally*/
+ // void sendWatchdog();
+ // /** Used internally. When the connection to the SPITServer is lost an eventConnectionStatus will occur*/
+ // void eventWatchdogLost();
+ // //--------------- SPIT Project ---------------
+ // private:
+ // void parseReportProject(Message::ReportProject &message);
+ // void parseCloseProject(Message::CloseProject &message);
- public:
- /** Returns the SPITServer's project ID - may be the same as the project's name*/
- string getServerProjectID();
- /** Returns the SPITServer's project name*/
- string getServerProjectName();
- /** Returns frame rate per second. This is the time resolution in which the server transmits time data. The unit of time data is always frames.*/
- int getServerFramesPerSecond();
+ // public:
+ // /** Returns the SPITServer's project ID - may be the same as the project's name*/
+ // string getServerProjectID();
+ // /** Returns the SPITServer's project name*/
+ // string getServerProjectName();
+ // /** Returns frame rate per second. This is the time resolution in which the server transmits time data. The unit of time data is always frames.*/
+ // int getServerFramesPerSecond();
- private:
- void parseRequestProjectTransfer(Message::RequestProjectTransfer &message);
- void parseStartProjectTransfer(Message::StartProjectTransfer &message);
- void parseEndProjectTransfer(Message::EndProjectTransfer &message);
+ // private:
+ // void parseRequestProjectTransfer(Message::RequestProjectTransfer &message);
+ // void parseStartProjectTransfer(Message::StartProjectTransfer &message);
+ // void parseEndProjectTransfer(Message::EndProjectTransfer &message);
- public:
- // static void sendProject(SClient *p_PtrSProcessor);
+ // public:
+ // // static void sendProject(SClient *p_PtrSProcessor);
- // --------------- SPIT Types ---------------
- public:
- /**
- * Creates a fixed SPITType for application actions that are always present and project independent.
- * Fixed SPIT types cannot be changed or deleted by the server.
- * These SPITTypes will be automatically added to the SPITType-List and sended to the server.
- * @param p_ID an unique of the SPITType, these are always the same per client approach. Different client approaches should use different ids.
- * @param p_GroupName a name which groups the actions/SPITTypes
- * @param p_Name the name of the Action/SPITType
- * @param p_DefaultDelay maybe there is an default delay until the action starts, this is only used for graphical representations, 0 is allowd
- * @param p_DefaultDuration maybe the action has a default duration, this is only used for graphical representations, 0 is allowd
- * @return the pointer to the new SPITType.
- */
- SType *createTypeFixed(string iD, string groupName, string name, uint64_t defaultDelay, uint64_t defaultDuration);
+ // // --------------- SPIT Types ---------------
+ // public:
+ // /**
+ // * Creates a fixed SPITType for application actions that are always present and project independent.
+ // * Fixed SPIT types cannot be changed or deleted by the server.
+ // * These SPITTypes will be automatically added to the SPITType-List and sended to the server.
+ // * @param p_ID an unique of the SPITType, these are always the same per client approach. Different client approaches should use different ids.
+ // * @param p_GroupName a name which groups the actions/SPITTypes
+ // * @param p_Name the name of the Action/SPITType
+ // * @param p_DefaultDelay maybe there is an default delay until the action starts, this is only used for graphical representations, 0 is allowd
+ // * @param p_DefaultDuration maybe the action has a default duration, this is only used for graphical representations, 0 is allowd
+ // * @return the pointer to the new SPITType.
+ // */
+ // SType *createTypeFixed(string iD, string groupName, string name, uint64_t defaultDelay, uint64_t defaultDuration);
- /**
- * Creates a SPITType for application actions.
- * These SPITTypes will be automatically added to the SPITType-List and sended to the server.
- * @param p_ID an unique of the SPITType, these are always the same per client approach. Different client approaches should use different ids.
- * @param p_GroupName a name which groups the actions/SPITTypes
- * @param p_Name the name of the Action/SPITType
- * @param p_DefaultDelay maybe there is an default delay until the action starts, this is only used for graphical representations, 0 is allowd
- * @param p_DefaultDuration maybe the action has a default duration, this is only used for graphical representations, 0 is allowd
- * @param p_Fixed true = the server is not allowed to change this SPITType, false = the server may change or delete this SPITType
- * @param p_ProjectIndepended true = the SPITType belongs to a specific project, false = the SpitType always exists for every project
- * @return the pointer to the new SPITType.
- */
- SType *createType(string iD, string groupName, string name, uint64_t defaultDelay, uint64_t defaultDuration, bool fixed, bool projectIndepended);
-
- private:
- // receive SPIT-Types
+ // /**
+ // * Creates a SPITType for application actions.
+ // * These SPITTypes will be automatically added to the SPITType-List and sended to the server.
+ // * @param p_ID an unique of the SPITType, these are always the same per client approach. Different client approaches should use different ids.
+ // * @param p_GroupName a name which groups the actions/SPITTypes
+ // * @param p_Name the name of the Action/SPITType
+ // * @param p_DefaultDelay maybe there is an default delay until the action starts, this is only used for graphical representations, 0 is allowd
+ // * @param p_DefaultDuration maybe the action has a default duration, this is only used for graphical representations, 0 is allowd
+ // * @param p_Fixed true = the server is not allowed to change this SPITType, false = the server may change or delete this SPITType
+ // * @param p_ProjectIndepended true = the SPITType belongs to a specific project, false = the SpitType always exists for every project
+ // * @return the pointer to the new SPITType.
+ // */
+ // SType *createType(string iD, string groupName, string name, uint64_t defaultDelay, uint64_t defaultDuration, bool fixed, bool projectIndepended);
+ private:
+public: // @todo delete
void parseReportType(Message::ReportType &message);
- void parseRemoveSPITType(Message::RemoveType &message);
- int sendSPITTypeInternal(SType &sType);
+ // void parseRemoveSPITType(Message::RemoveType &message);
+ // int sendSPITTypeInternal(SType &sType);
- public:
- /**
- * If a client wants to change a SPITType, he should send it to the server.
- * If the SPITTye is a fixed one and not created by the client himself, then an eventSPITType can be sent from the server, which cancels the change.
- * @param spitypeID the id of the SPITType to remove.
- * @return 0 = is sended, -1 = is not sended
- */
- bool changeSPITType(SType *spitType);
- /**
- * If a client wants to remove a SPITType, he should send it to the server.
- * If the SPITTye is a fixed one and not created by the client himself, then an eventSPITType can be sent from the server, which cancels the deletion.
- * @param spitypeID the id of the SPITType to remove.
- * @return 0 = is sended, -1 = is not sended
- */
- int removeSPITType(string spitypeID);
+ // public:
+ // /**
+ // * If a client wants to change a SPITType, he should send it to the server.
+ // * If the SPITTye is a fixed one and not created by the client himself, then an eventSPITType can be sent from the server, which cancels the change.
+ // * @param spitypeID the id of the SPITType to remove.
+ // * @return 0 = is sended, -1 = is not sended
+ // */
+ // bool changeSPITType(SType *spitType);
+ // /**
+ // * If a client wants to remove a SPITType, he should send it to the server.
+ // * If the SPITTye is a fixed one and not created by the client himself, then an eventSPITType can be sent from the server, which cancels the deletion.
+ // * @param spitypeID the id of the SPITType to remove.
+ // * @return 0 = is sended, -1 = is not sended
+ // */
+ // int removeSPITType(string spitypeID);
- public:
- //--------------- SPIT Objects ---------------
- private:
- void parseReportSPITObject(Message::ReportObject &message);
- void parseRemoveSPITObject(Message::RemoveObject &message);
- int sendSPITObjectInternal(SObject *ptrObject);
+ // public:
+ // //--------------- SPIT Objects ---------------
+ // private:
+ // void parseReportSPITObject(Message::ReportObject &message);
+ // void parseRemoveSPITObject(Message::RemoveObject &message);
+ // int sendSPITObjectInternal(SObject *ptrObject);
- public:
- /**
- * When the client changes a SPITObject (normally the client should not do this), then it should send the changes to the SPITServer.
- * The SPITServer may discard the changes and an eventSPITObject occurs.
- * @param spitObject the pointer to the changed SPITObject.
- * @return 0 = sended, -1 = not sended
- */
- bool changeSPITObject(SObject *spitObject);
- /**
- * When the client removes a SPITObject (normally the client should not do this), then he should send it to the SPITServer.
- * The SPITServer may discard the deletion and an eventSPITObject occurs.
- * @param objectID the id of the SPITObject to remove.
- * @return 0 = sended, -1 = not sended
- */
- int removeSPITObject(string objectID);
+ // public:
+ // /**
+ // * When the client changes a SPITObject (normally the client should not do this), then it should send the changes to the SPITServer.
+ // * The SPITServer may discard the changes and an eventSPITObject occurs.
+ // * @param spitObject the pointer to the changed SPITObject.
+ // * @return 0 = sended, -1 = not sended
+ // */
+ // bool changeSPITObject(SObject *spitObject);
+ // /**
+ // * When the client removes a SPITObject (normally the client should not do this), then he should send it to the SPITServer.
+ // * The SPITServer may discard the deletion and an eventSPITObject occurs.
+ // * @param objectID the id of the SPITObject to remove.
+ // * @return 0 = sended, -1 = not sended
+ // */
+ // int removeSPITObject(string objectID);
- public:
- //--------------- Play SPIT Objects ---------------
- private:
- void parsePlaySPITStart(Message::PlayStart &message);
- void parsePlaySPITObject(Message::PlayObject &message);
- void parsePlaySPITEnd(Message::PlayEnd &message);
- void parseReportPlayStatus(Message::ReportPlayStatus &message);
+ // public:
+ // //--------------- Play SPIT Objects ---------------
+ // private:
+ // void parsePlaySPITStart(Message::PlayStart &message);
+ // void parsePlaySPITObject(Message::PlayObject &message);
+ // void parsePlaySPITEnd(Message::PlayEnd &message);
+ // void parseReportPlayStatus(Message::ReportPlayStatus &message);
- public:
- //--------- Remote ----------
- void sendRemoteObject(string objectID, int valuePpm = 0, char valueFlag = 0x00);
+ // public:
+ // //--------- Remote ----------
+ // void sendRemoteObject(string objectID, int valuePpm = 0, char valueFlag = 0x00);
- private:
- bool mAbortSearch{};
- bool sAnswered{};
- void answerWatchdog() {
- sAnswered = true;
- }
+ // private:
+ // bool mAbortSearch{};
+ // bool sAnswered{};
+ // void answerWatchdog() {
+ // sAnswered = true;
+ // }
- SpitRepo mSpitObjects;
- SpitRepo mRemoteSpitObjects;
+ // SpitRepo mSpitObjects;
+ // SpitRepo mRemoteSpitObjects;
+ public: // @todo remove
SpitRepo mSpitTypes;
SpitRepo mRemoteSpitTypes;
};
-}
\ No newline at end of file
+} // namespace spit
\ No newline at end of file
diff --git a/components/spit/src/spit_client.cpp b/components/spit/src/spit_client.cpp
index 3d8d60f..4f11a89 100644
--- a/components/spit/src/spit_client.cpp
+++ b/components/spit/src/spit_client.cpp
@@ -18,6 +18,11 @@ SClient::SClient(string name, string projName, ISocket &socket, Callbacks calls)
mCallbacks(calls),
mName(name),
mProjName(projName),
+ mProcessor(name, projName, getClientHostName(), createGUID(), calls,
+ {
+ .sendSpitTypeInternal = [&](SType &sType) { return sendSPITTypeInternal(sType);}
+ }
+ ),
mSocket(socket) {
mID = createGUID();
mComputerName = getClientHostName();
@@ -40,7 +45,7 @@ void SClient::clientProjectClose() {
void SClient::clientProjectLoaded() {
// set confirmed = false for all SPITTypes and SPITObjects
- SType::setConfirmedFalse(mSpitTypes);
+ SType::setConfirmedFalse(mProcessor.mSpitTypes);
SObject::setConfirmedFalse(mSpitObjects);
if (mConnectionStatus == Connection::Ok) {
@@ -68,7 +73,7 @@ void SClient::clientProjectLoaded() {
* @param actionAssigned
*/
void SClient::setActionSPITType(string typeId, bool actionAssigned) {
- SType *spitType = mSpitTypes.getEntry(typeId);
+ SType *spitType = mProcessor.mSpitTypes.getEntry(typeId);
if (spitType == nullptr)
return;
if (spitType->ActionAssigned.set(actionAssigned)) {
@@ -383,7 +388,7 @@ void SClient::parseMessage(unique_ptr message) {
break;
//----- SPIT Types ------
case Message::ReportType::OPFLAG:
- parseReportType(message->getAs());
+ mProcessor.parseReportType(message->getAs());
break;
case Message::RemoveType::OPFLAG:
parseRemoveSPITType(message->getAs());
@@ -605,7 +610,7 @@ void SClient::parseReportProject(Message::ReportProject &message) {
mCallbacks.onProjectUpdate(ProjUpdate::ServerLoaded, mServerProjectID);
// Set all SPITTypes and SPITObjects confirmed = false
- SType::setConfirmedFalse(mSpitTypes);
+ SType::setConfirmedFalse(mProcessor.mSpitTypes);
SObject::setConfirmedFalse(mSpitObjects);
// Send RequestProjectTransfer
@@ -642,7 +647,7 @@ void SClient::parseRequestProjectTransfer(Message::RequestProjectTransfer &messa
}
// send all listes SPITTypes
- for (const auto& [key, value] : mSpitTypes.getRepo()) {
+ for (const auto& [key, value] : mProcessor.mSpitTypes.getRepo()) {
sendSPITTypeInternal(*value);
fos::Task::delayMs(10);
}
@@ -797,67 +802,16 @@ void SClient::parseEndProjectTransfer(Message::EndProjectTransfer &message) {
}
}
-//----- SPIT Types ------
-void SClient::parseReportType(Message::ReportType &message) {
- ESP_LOGD(TAG, "parse ReportType ID %s Name %s",message.getID().c_str(), message.getName().c_str());
- SType *ptrSPITType;
- bool boolNew = false;
- bool boolChanged = false;
- {
- if (message.getServerRemote() == false) {
- ptrSPITType = mSpitTypes.getEntry(message.getID());
- if (ptrSPITType == nullptr) {
- // The user's app my veto the SPITType
- bool createdByClient = false;
- if (ptrSPITType) {
- createdByClient = ptrSPITType->getCreatedByClient();
- }
-
- if (mCallbacks.onCheckSpitTypeVeto(false, createdByClient) == false) {
- ESP_LOGW(TAG, "TypeVeto %s / %s", message.getID().c_str(), message.getName().c_str());
- return;
- }
- auto spitType = make_unique(message.getID());
- ptrSPITType = spitType.get();
- mSpitTypes.addEntry(move(spitType));
- boolNew = true;
- }
- } else {
- ptrSPITType = mRemoteSpitTypes.getEntry(message.getID());
- if (ptrSPITType == nullptr) {
- auto spitType = make_unique(message.getID());
- ptrSPITType = spitType.get();
- mRemoteSpitTypes.addEntry(move(spitType));
- boolNew = true;
- }
- }
- if (!ptrSPITType->setMessageOP(message)) {
- // SPITType is not changable -> send back to the server
- sendSPITTypeInternal(*ptrSPITType);
- return;
- }
-
- auto eventType = boolNew ? ObjectEvent::Created : ObjectEvent::Changed;
- // add or change SPITType
- mCallbacks.onSpitType(eventType, ptrSPITType->ServerRemote.get(), *ptrSPITType);
-
- if (ptrSPITType != nullptr) {
- if (ptrSPITType->setConfirmed(true) == true || boolChanged == true) {
- sendSPITTypeInternal(*ptrSPITType);
- }
- }
- }
-}
void SClient::parseRemoveSPITType(Message::RemoveType &message) {
ESP_LOGD(TAG, "parse RemoveType %s", message.getID().c_str());
bool boolRemote = false;
string stringSPITTypeID = message.getID();
- SType *ptrSPITType = mRemoteSpitTypes.getEntry(stringSPITTypeID);
+ SType *ptrSPITType = mProcessor.mRemoteSpitTypes.getEntry(stringSPITTypeID);
if (!ptrSPITType) {
boolRemote = true;
} else {
- ptrSPITType = mSpitTypes.getEntry(stringSPITTypeID);
+ ptrSPITType = mProcessor.mSpitTypes.getEntry(stringSPITTypeID);
if (!ptrSPITType) {
boolRemote = false;
} else {
@@ -875,9 +829,9 @@ void SClient::parseRemoveSPITType(Message::RemoveType &message) {
mCallbacks.onSpitType(ObjectEvent::Deleted, boolRemote, *ptrSPITType);
if (boolRemote == false) {
- mSpitTypes.removeEntry(*ptrSPITType);
+ mProcessor.mSpitTypes.removeEntry(*ptrSPITType);
} else {
- mRemoteSpitTypes.removeEntry(*ptrSPITType);
+ mProcessor.mRemoteSpitTypes.removeEntry(*ptrSPITType);
}
}
@@ -901,7 +855,7 @@ int SClient::sendSPITTypeInternal(SType &p_SPITType) {
bool SClient::changeSPITType(SType *p_SPITType) {
if (p_SPITType == nullptr)
return false;
- SType *ptrSPITType = mSpitTypes.getEntry(p_SPITType->getID());
+ SType *ptrSPITType = mProcessor.mSpitTypes.getEntry(p_SPITType->getID());
if (ptrSPITType == nullptr)
return false;
@@ -932,13 +886,13 @@ int SClient::removeSPITType(string p_SPITTypeID) {
return -1;
SType *ptrSPITType;
{
- ptrSPITType = mSpitTypes.getEntry(p_SPITTypeID);
+ ptrSPITType = mProcessor.mSpitTypes.getEntry(p_SPITTypeID);
if (ptrSPITType == nullptr)
return -1;
Message::RemoveType sMRemoveSPITType;
ptrSPITType->fillMessageOP(sMRemoveSPITType);
mCallbacks.onSpitType(ObjectEvent::Deleted, false, *ptrSPITType);
- mSpitTypes.removeEntry(*ptrSPITType);
+ mProcessor.mSpitTypes.removeEntry(*ptrSPITType);
return sendSPITMessage(sMRemoveSPITType);
}
return -1;
@@ -950,11 +904,11 @@ SType *SClient::createTypeFixed(string iD, string p_GroupName, string p_Name, ui
SType *SClient::createType(string p_ID, string p_GroupName, string p_Name, uint64_t p_DefaultDelay, uint64_t p_DefaultDuration, bool p_FIxed, bool p_ProjectIndepended) {
bool boolNew;
- SType *ptrSPITType = mSpitTypes.getEntry(p_ID);
+ SType *ptrSPITType = mProcessor.mSpitTypes.getEntry(p_ID);
if (ptrSPITType == nullptr) {
auto spitType = make_unique(p_ID, p_GroupName, p_Name, p_FIxed, p_ProjectIndepended, p_DefaultDelay, p_DefaultDuration);
ptrSPITType = spitType.get();
- mSpitTypes.addEntry(move(spitType));
+ mProcessor.mSpitTypes.addEntry(move(spitType));
ptrSPITType->setCreatedByClient(true);
boolNew = true;
} else {
@@ -986,7 +940,7 @@ void SClient::parseReportSPITObject(Message::ReportObject &message) {
if (message.getServerRemote() == false) {
boolRemote = false;
ptrSPITObject = mSpitObjects.getEntry(message.getID());
- ptrSPITType = mSpitTypes.getEntry(message.getSPITTypeID());
+ ptrSPITType = mProcessor.mSpitTypes.getEntry(message.getSPITTypeID());
if (ptrSPITType == nullptr) {
// No associated SPITType found
@@ -1020,7 +974,7 @@ void SClient::parseReportSPITObject(Message::ReportObject &message) {
} else {
boolRemote = true;
ptrSPITObject = mRemoteSpitObjects.getEntry(message.getID());
- ptrSPITType = mRemoteSpitTypes.getEntry(message.getSPITTypeID());
+ ptrSPITType = mProcessor.mRemoteSpitTypes.getEntry(message.getSPITTypeID());
if (ptrSPITType == nullptr) {
// No associated SPITType found
return;
@@ -1058,7 +1012,7 @@ void SClient::parseRemoveSPITObject(Message::RemoveObject &message) {
ESP_LOGD(TAG, "parse RemoveObject %s", message.getID().c_str());
SObject *ptrSPITObject = mRemoteSpitObjects.getEntry(message.getID());
if (ptrSPITObject != nullptr) {
- SType *ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
+ SType *ptrSPITType = mProcessor.mRemoteSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
if (ptrSPITType != nullptr) {
mCallbacks.onSpitObject(ObjectEvent::Deleted, true, *ptrSPITType, *ptrSPITObject);
}
@@ -1094,7 +1048,7 @@ bool SClient::changeSPITObject(SObject *obj) {
ptrSPITObject = mSpitObjects.getEntry(obj->getID());
if (ptrSPITObject == nullptr)
return false;
- ptrSPITType = mSpitTypes.getEntry(obj->getID());
+ ptrSPITType = mProcessor.mSpitTypes.getEntry(obj->getID());
if (ptrSPITObject == nullptr)
return false;
@@ -1141,7 +1095,7 @@ int SClient::removeSPITObject(string objId) {
ptrSPITObject = mSpitObjects.getEntry(objId);
if (ptrSPITObject == nullptr)
return -1;
- ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
+ ptrSPITType = mProcessor.mSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
if (ptrSPITType == nullptr)
return -1;
ptrSPITObject->fillMessageOP(sMRemoveSPITObject);
@@ -1189,7 +1143,7 @@ void SClient::parsePlaySPITEnd(Message::PlayEnd &message) {
SPlayer::PlayType *ptrPlaySPITType = i->second.get();
bool boolStarted = ptrPlaySPITType->getIsNew();
bool boolStopped = (ptrPlaySPITType->getIsPlayed() == false);
- SType *ptrSPITType = mSpitTypes.getEntry(ptrPlaySPITType->getSPITTypeID());
+ SType *ptrSPITType = mProcessor.mSpitTypes.getEntry(ptrPlaySPITType->getSPITTypeID());
if (ptrSPITType == nullptr) {
// set isplayed to false, the ptrPlayObject will be removed by ptrSPITPlayer.endPlaySequence()
ptrPlaySPITType->setIsPlayed(false);
@@ -1211,9 +1165,9 @@ void SClient::parseReportPlayStatus(Message::ReportPlayStatus &message) {
}
}
if (ptrSPITObject->ServerRemote.get() == false) {
- ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
+ ptrSPITType = mProcessor.mSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
} else {
- ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
+ ptrSPITType = mProcessor.mRemoteSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
}
if (ptrSPITType == nullptr) {
diff --git a/components/spit/src/spit_processor.cpp b/components/spit/src/spit_processor.cpp
index 285344d..080d234 100644
--- a/components/spit/src/spit_processor.cpp
+++ b/components/spit/src/spit_processor.cpp
@@ -9,763 +9,762 @@ static const char *TAG = "SPIT";
* Create a new SPIT_client instance, should be done once by the user app.
* @param p_SPITClientInterface the user app should implement the SPIT_ClientInterface.
*/
-SProcessor::SProcessor(string name, string projName, string hostName, string guid, Callbacks calls) // @todo
- : mCallbacks(calls),
+SProcessor::SProcessor(string name, string projName, string hostName, string guid, Callbacks calls, InternalCallbacks intern)
+ : mCallbacks(calls),
+ mInternCallbacks(intern),
mGuid(guid),
- mName(name),
+ mName(name),
mProjName(projName),
mComputerName(hostName) {
}
-SProcessor::~SProcessor() { // @todo
- stopServerAutoDetect();
- disconnectInternal(Connection::None);
+SProcessor::~SProcessor() {
+ // stopServerAutoDetect();
+ // disconnectInternal(Connection::None);
}
-void SProcessor::clientProjectClose() { // @todo
- if (mConnectionStatus == Connection::Ok) {
- ESP_LOGI(TAG, " ... tidy up ressources");
- Message::CloseProject closeSPITProject(mProjName);
- // if (sendSPITMessage(closeSPITProject) < 0) {
- // ESP_LOGD(TAG, "Client could not send Client's ReportProject");
- // }
- }
-}
-
-void SProcessor::clientProjectLoaded() { // @todo
- // set confirmed = false for all SPITTypes and SPITObjects
- SType::setConfirmedFalse(mSpitTypes);
- SObject::setConfirmedFalse(mSpitObjects);
-
- if (mConnectionStatus == Connection::Ok) {
- // send ReportProject to the server
- Message::ReportProject reportSPITProject(mProjName, mProjName);
- reportSPITProject.setFramesPerSecond(0);
- // if (sendSPITMessage(reportSPITProject) < 0) {
- // ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send Client's ReportProject");
- // }
-
- // send RequestProjectTransfer
- Message::RequestProjectTransfer sMRequestProjectTransfer;
- // if (sendSPITMessage(sMRequestProjectTransfer) < 0) {
- // ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send RequestProjectTransfer");
- // }
- }
-}
-
-/**
- * Virtual construct - means actionAssigned for SPITTypes is is not implemented in SPITProtocol.
- * This can used to setActionAssigned to all SPITObjects with this SPITType.
- * This may be used in the case when the same action should be done for every SPITObject with this SPITType associated.
- * This tells the server not what action is done, but it tells the server that there is an action.
- * @param typeId the id of the SPITType
- * @param actionAssigned
- */
-void SProcessor::setActionSPITType(string typeId, bool actionAssigned) { // @todo
- SType *spitType = mSpitTypes.getEntry(typeId);
- if (spitType == nullptr)
- return;
- if (spitType->ActionAssigned.set(actionAssigned)) {
- sendSPITTypeInternal(*spitType);
- for (auto& [key, value] : mSpitObjects.getRepo()) {
- if (value->SPITTypeID.get() == spitType->getID()) {
- if (value->setActionAssignedType(actionAssigned) == true) {
- sendSPITObjectInternal(value.get());
- }
- }
- }
- }
-}
-
-/** This should be called if the user wants to associate/remove an action with a SPITObject. */
-void SProcessor::setActionSPITObject(string spitObjId, bool actionAssigned) { // @todo
- SObject *spitObject = mSpitObjects.getEntry(spitObjId);
- if (spitObject == nullptr)
- return;
- if (spitObject->setActionAssigned(actionAssigned) == true) {
- sendSPITObjectInternal(spitObject);
- }
-}
-//---------- ServerAutoDetection SAD -----------
-
-/** Starts the autodetection of SPITServers in the local network. If a connection is tried, the autodetection should be stopped before.
- * If a SPITServer is detected in the locale network an eventServerDetected occurs.
- */
-void SProcessor::startServerAutoDetect() { // @todo
- // if (mDisconnectedByServer == true) {
- // // Server has previously disconnected -> do not start ServerAutodetect directly
- // fos::Task::delayMs(1000); // sleep a little to give the SPITServer time to clean up its stuff
- // }
- // SadDetectedServer::clearDetectedServers();
- // if (!sThread) {
- // sThread = new fos::TaskT(SProcessor::processSocketTask, *this, "spitSock", fos::Task::DefaultStackSize * 2); // @todo
- // }
- // mAbortSearch = false;
- // sStartSad.give();
-}
-
-/** Stops the auto detection of SPIT servers. */
-void SProcessor::stopServerAutoDetect() { // @todo
- mAbortSearch = true;
-}
-/**
- * If a new server was found by the ServerAutoDetect mechanism, this function is called.
- * To do so the SAD_Client ServerAutoDetect has to be startet - see SAD_Client::startServerAutoDetect.
- * If a server can be reached via several IP addresses, the IP address is selected according to the following preference:
- */
-void SProcessor::eventServerDetected(SadDetectedServer &server) { // @todo
- mCallbacks.onServerEvent(ServerEvent::Detect, server);
- // If a connection has been established and the connection is lost -> reconnect
- if (_doReconnect) {
- if (mServerID == server.getID()) {
- stopServerAutoDetect();
- ESP_LOGI(TAG, "reconnect to %s / %s", server.getIP().data(), server.getPort().data());
- if (connect(server.getIP(), server.getPort(), server.getClientIP(), "0")) {
- return;
- }
- }
- }
- // Stop auto detection because a suitable server was found
- stopServerAutoDetect();
- ESP_LOGI(TAG, "connect to %s / %s", server.getIP().data(), server.getPort().data());
- if (!connect(server.getIP(), server.getPort(), server.getClientIP(), "0" /*= any port*/)) {
- // connection message could not be sent -> better to restart AutoDetection
- startServerAutoDetect();
- }
-}
-
-/**
- * If a SPITServer is not more found, this function is called.
- * To do so the SAD_Client ServerAutoDetect has to be startet - see SAD_Client::startServerAutoDetect.
- */
-void SProcessor::eventServerLost(SadDetectedServer &server) { // @todo
- mCallbacks.onServerEvent(ServerEvent::Lost, server);
-}
-
-void SProcessor::eventServerChanged(SadDetectedServer &server) { // @todo
- mCallbacks.onServerEvent(ServerEvent::Changed, server);
- // tryConnection(detectedServer);
-}
-
-// void MyApp::tryConnection(const SadDetectedServer &detected) {
-// // fetch the infoemations from the detected
-// bool boolSuccess = false;
-// bool boolPossibleConnect = checkPossibleConnection(detected);
-
-// if (boolPossibleConnect == false)
-// return;
-
-// // --------------------------------------
-// // You have three Options to use the detected server
-// // OPTION 1 Use the first server found
-// // OPTION 2 Use the first server found that fulfills specific conditions
-// // OPTION 3 take a copy of the detected and do connection later
-// // SadDetectedServer o_DetectedServer = detected; //this will call the copy constructor
-// // ---------------------------------------
-
-// // Excample use the first detected LOOPBACK server, means the server runs on the same computer as this client
-// // if (detected.getIpIsLoopback() == true) { //omit the if condition if you want to use the first server found
-
-// boolSuccess = false;
-// // Stop auto detection because a suitable server was found
-// stopServerAutoDetect();
-// if (mSPIT_Client != nullptr) {
-// mServerProjectName = detected.getProjectName();
-// mServerIP = detected.getIP();
-
-// #if defined(DEBUGOUTPUT)
-// ESP_LOGD(TAG, "MySPITApp: connect to %s ", detected.getIP().data());
-// #endif
-// // Use the mBoardNumber as login name
-// string stringLoginName = "";
-// string stringLoginPassword = "";
-// boolSuccess = mSPIT_Client->connect(detected.getIP(), detected.getPort(), detected.getClientIP(), stringLoginName, stringLoginPassword); // ClientPort = "0" meeans use any port
+// void SProcessor::clientProjectClose() {
+// if (mConnectionStatus == Connection::Ok) {
+// ESP_LOGI(TAG, " ... tidy up ressources");
+// Message::CloseProject closeSPITProject(mProjName);
+// // if (sendSPITMessage(closeSPITProject) < 0) {
+// // ESP_LOGD(TAG, "Client could not send Client's ReportProject");
+// // }
// }
-// if (boolSuccess == false) {
-// // connection message could not be sent
-// // perhaps restart AutoDetection
-// startServerAutoDetect();
-// } else {
-// // WAITING FOR CONNECTION ANSWER
-// // If the Server is closed in the meantime no answer will return
-// //-> connect(..) has started the watchdog
-// }
-
-// // } //Excample
// }
-std::vector SProcessor::createMessage(Message::OPPart &opPart) {
- if (mMessageNumberSend == 255)
- mMessageNumberSend = 1;
- else
- mMessageNumberSend++;
- opPart.setMessageNumber(mMessageNumberSend);
- opPart.setServerInfoInHeader(mGuid, mServerID);
+// void SProcessor::clientProjectLoaded() {
+// // set confirmed = false for all SPITTypes and SPITObjects
+// SType::setConfirmedFalse(mSpitTypes);
+// SObject::setConfirmedFalse(mSpitObjects);
- int opFlag = opPart.getHeader()->getType();
- try {
- return Message::createMessage(opPart);
- } catch (...) {
- ESP_LOGD(TAG, "Exception client OPFlag: %d", opFlag);
- }
- return {};
-}
-// todo Delete SProcessor::sendSPITMessage(Message::OPPart &opPart
+// if (mConnectionStatus == Connection::Ok) {
+// // send ReportProject to the server
+// Message::ReportProject reportSPITProject(mProjName, mProjName);
+// reportSPITProject.setFramesPerSecond(0);
+// // if (sendSPITMessage(reportSPITProject) < 0) {
+// // ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send Client's ReportProject");
+// // }
-// void SProcessor::receiveSPITMessage(SClient &rM) { // @todo
-// char buffer[MAXSPITMESSAGEBYTECOUNT + 1];
-// int rdLen;
-// while (rM.mStopReceiveMessages == false) {
-// rdLen = rM.mSocket.receiveMessage(buffer, MAXSPITMESSAGEBYTECOUNT, nullptr);
-// if (rdLen < 0) {
-// if (rM.mStopReceiveMessages) {
+// // send RequestProjectTransfer
+// Message::RequestProjectTransfer sMRequestProjectTransfer;
+// // if (sendSPITMessage(sMRequestProjectTransfer) < 0) {
+// // ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send RequestProjectTransfer");
+// // }
+// }
+// }
+
+// /**
+// * Virtual construct - means actionAssigned for SPITTypes is is not implemented in SPITProtocol.
+// * This can used to setActionAssigned to all SPITObjects with this SPITType.
+// * This may be used in the case when the same action should be done for every SPITObject with this SPITType associated.
+// * This tells the server not what action is done, but it tells the server that there is an action.
+// * @param typeId the id of the SPITType
+// * @param actionAssigned
+// */
+// void SProcessor::setActionSPITType(string typeId, bool actionAssigned) {
+// SType *spitType = mSpitTypes.getEntry(typeId);
+// if (spitType == nullptr)
+// return;
+// if (spitType->ActionAssigned.set(actionAssigned)) {
+// sendSPITTypeInternal(*spitType);
+// for (auto& [key, value] : mSpitObjects.getRepo()) {
+// if (value->SPITTypeID.get() == spitType->getID()) {
+// if (value->setActionAssignedType(actionAssigned) == true) {
+// sendSPITObjectInternal(value.get());
+// }
+// }
+// }
+// }
+// }
+
+// /** This should be called if the user wants to associate/remove an action with a SPITObject. */
+// void SProcessor::setActionSPITObject(string spitObjId, bool actionAssigned) {
+// SObject *spitObject = mSpitObjects.getEntry(spitObjId);
+// if (spitObject == nullptr)
+// return;
+// if (spitObject->setActionAssigned(actionAssigned) == true) {
+// sendSPITObjectInternal(spitObject);
+// }
+// }
+// //---------- ServerAutoDetection SAD -----------
+
+// /** Starts the autodetection of SPITServers in the local network. If a connection is tried, the autodetection should be stopped before.
+// * If a SPITServer is detected in the locale network an eventServerDetected occurs.
+// */
+// void SProcessor::startServerAutoDetect() {
+// // if (mDisconnectedByServer == true) {
+// // // Server has previously disconnected -> do not start ServerAutodetect directly
+// // fos::Task::delayMs(1000); // sleep a little to give the SPITServer time to clean up its stuff
+// // }
+// // SadDetectedServer::clearDetectedServers();
+// // if (!sThread) {
+// // sThread = new fos::TaskT(SProcessor::processSocketTask, *this, "spitSock", fos::Task::DefaultStackSize * 2);
+// // }
+// // mAbortSearch = false;
+// // sStartSad.give();
+// }
+
+// /** Stops the auto detection of SPIT servers. */
+// void SProcessor::stopServerAutoDetect() {
+// mAbortSearch = true;
+// }
+// /**
+// * If a new server was found by the ServerAutoDetect mechanism, this function is called.
+// * To do so the SAD_Client ServerAutoDetect has to be startet - see SAD_Client::startServerAutoDetect.
+// * If a server can be reached via several IP addresses, the IP address is selected according to the following preference:
+// */
+// void SProcessor::eventServerDetected(SadDetectedServer &server) {
+// mCallbacks.onServerEvent(ServerEvent::Detect, server);
+// // If a connection has been established and the connection is lost -> reconnect
+// if (_doReconnect) {
+// if (mServerID == server.getID()) {
+// stopServerAutoDetect();
+// ESP_LOGI(TAG, "reconnect to %s / %s", server.getIP().data(), server.getPort().data());
+// if (connect(server.getIP(), server.getPort(), server.getClientIP(), "0")) {
// return;
// }
-// continue;
// }
-// auto vec = vector(buffer, buffer + rdLen);
-// rM.checkParseMessageData(move(spitMsg));
-// // rM.checkParseMessage(move(spitMsg));
+// }
+// // Stop auto detection because a suitable server was found
+// stopServerAutoDetect();
+// ESP_LOGI(TAG, "connect to %s / %s", server.getIP().data(), server.getPort().data());
+// if (!connect(server.getIP(), server.getPort(), server.getClientIP(), "0" /*= any port*/)) {
+// // connection message could not be sent -> better to restart AutoDetection
+// startServerAutoDetect();
// }
// }
-void SProcessor::resetMessageNumberReceived() { // @todo
- mMessageNumberReceived = -1;
- mOvertakingMessages.clear();
-}
-
-void SProcessor::checkParseMessageData(vector data) {
- auto message = make_unique(data);
- answerWatchdog();
- if (!message->getHeader() || !message->getOPPart()) {
- ESP_LOGD(TAG, "Client::parseMessage incomplete message");
- return;
- }
-
- int msgNum = (int)(message->getHeader()->getMessageNumber() & 0xFF);
-
- if (msgNum == 0) {
- parseMessage(*message);
- return;
- }
- if (mMessageNumberReceived < 0) {
- mMessageNumberReceived = msgNum;
- parseMessage(*message);
- return;
- }
-
- int msgNumNext = mMessageNumberReceived + 1;
- if (msgNumNext > 255 || msgNumNext < 1)
- msgNumNext = 1;
-
- if (msgNum == msgNumNext) {
- mMessageNumberReceived = msgNum;
- parseMessage(*message);
-
- // check overtaking messages
- auto it = mOvertakingMessages.begin();
- while (mOvertakingMessages.size() > 0) {
-
- msgNumNext = mMessageNumberReceived + 1;
- if (msgNumNext > 255 || msgNumNext < 1)
- msgNumNext = 1;
-
- auto &overtakingMessage = *it;
- msgNum = (int)(overtakingMessage->getHeader()->getMessageNumber() & 0xFF);
-
- if (msgNum == msgNumNext) {
- mMessageNumberReceived = msgNum;
- parseMessage(*overtakingMessage);
- mOvertakingMessages.erase(it);
-
- it = mOvertakingMessages.begin();
- } else {
- break;
- }
- }
-
- } else {
- // p_SPITMessage has overtaken another message
- addOvertakingMessage(move(message));
- }
-}
-
-void SProcessor::addOvertakingMessage(unique_ptr message) { // @todo
- if (!message) {
- return;
- }
- if (mOvertakingMessages.size() > MAX_OVERTAKING_SPIT_MESSAGES) {
- ESP_LOGD(TAG, "Client receiveing: perhaps message lost !!!!!");
- }
-
- int intMessageNumber = (int)(message->getHeader()->getMessageNumber() & 0xFF);
- for (auto it = mOvertakingMessages.begin(); it != mOvertakingMessages.end(); ++it) {
- const auto &overtaking = *it;
- int intOvertakingMessageNumber = (int)(overtaking->getHeader()->getMessageNumber() & 0xFF);
- if (intMessageNumber < intOvertakingMessageNumber) {
- mOvertakingMessages.insert(it, move(message));
- return;
- }
- }
- mOvertakingMessages.push_back(move(message));
-}
-
-void SProcessor::parseMessage(Message& message) { // @todo
- answerWatchdog();
- if (!message.getHeader() || !message.getOPPart()) {
- ESP_LOGD(TAG, "Client::parseMessage incomplete message");
- return;
- }
-
- switch (message.getType()) {
- //----- Connection -----
- case Message::ConnectAnswer::OPFLAG:
- parseConnectAnswer(message.getAs());
- break;
- case Message::Disconnect::OPFLAG:
- parseDisconnect(message.getAs());
- break;
- case Message::ReportProject::OPFLAG:
- parseReportProject(message.getAs());
- break;
- case Message::Watchdog::OPFLAG:
- parseWatchdog(message.getAs());
- break;
- case Message::WatchdogAnswer::OPFLAG:
- parseWatchdogAnswer(message.getAs());
- break;
- //----- SPIT Project -----
- case Message::StartProjectTransfer::OPFLAG:
- parseStartProjectTransfer(message.getAs());
- break;
- case Message::CloseProject::OPFLAG:
- parseCloseProject(message.getAs());
- break;
- case Message::RequestProjectTransfer::OPFLAG:
- parseRequestProjectTransfer(message.getAs());
- break;
- case Message::EndProjectTransfer::OPFLAG:
- parseEndProjectTransfer(message.getAs());
- break;
- //----- SPIT Types ------
- case Message::ReportType::OPFLAG:
- parseReportType(message.getAs());
- break;
- case Message::RemoveType::OPFLAG:
- parseRemoveSPITType(message.getAs());
- //----- SPIT Objects ------
- break;
- case Message::ReportObject::OPFLAG:
- parseReportSPITObject(message.getAs());
- break;
- case Message::RemoveObject::OPFLAG:
- parseRemoveSPITObject(message.getAs());
- break;
- //----- Play SPIT Objects ------
- case Message::PlayStart::OPFLAG:
- parsePlaySPITStart(message.getAs());
- break;
- case Message::PlayObject::OPFLAG:
- parsePlaySPITObject(message.getAs());
- break;
- case Message::PlayEnd::OPFLAG:
- parsePlaySPITEnd(message.getAs());
- break;
- case Message::ReportPlayStatus::OPFLAG:
- parseReportPlayStatus(message.getAs());
- break;
- default:
- ESP_LOGD(TAG, "Client::parseMessage: Unknown Message");
- }
-}
-
-//----- Connection ------
-/**
- * Tries to connect to a SPITServer.
- * @param serverIP the ip address of the SPIT server
- * @param serverPort the port number of the SPIT server
- * @param clientIP the local IP address of the client
- * @param clientPort the port number of the Client, if "0" the OS uses any possible port number
- * @param loginName login user name (liveSHOW does not use this -> mayby ""
- * @param loginPassword login user password (liveSHOW does not use this -> mayby ""
- * @return false = an error has occured, true = the connect was sent to the server
- */
-bool SProcessor::connect(string serverIP, string serverPort, string clientIP, string clientPort, string loginName, string loginPassword) { // @todo
- disconnect();
- // mSocket.setConnectionParams(serverIP, serverPort, clientIP, clientPort);
- // if (mSocket.bindSocket(clientIP, clientPort) < 0) {
- // mStopReceiveMessages = true;
- // return false;
- // }
- Message::Connect sMConnect(mComputerName, mName);
- sMConnect.setLoginName(loginName);
- sMConnect.setLoginPassword(loginPassword);
- sMConnect.setServerIP(serverIP);
- if (serverPort.length() <= 0) {
- serverPort = "0";
- }
- int intServerPort = stoi(serverPort);
- sMConnect.setServerPort(intServerPort);
-
- // if (startReceiveSPITMessages() == false) {
- // mStopReceiveMessages = true;
- // return false;
- // }
- resetMessageNumberReceived();
- Connection intOldConnectionStatus = mConnectionStatus;
-
- mConnectionStatus = Connection::TryConnection;
- mCallbacks.onConnectionStatus(mServerID, mServerComputerName, mServerName, mServerStepTime,
- mConnectionStatus, intOldConnectionStatus);
-
- // sleep a little to make sure that the reception of the messages is started
- // fos::Task::delayMs(500);
- // if (sendSPITMessage(sMConnect) < 0) {
- // mConnectionStatus = Connection::None;
- // mStopReceiveMessages = true;
- // return false;
- // }
- return true;
-}
-
-/**
- * Terminates the connection to the SPITServer.
- */
-void SProcessor::disconnect() { // @todo
- disconnectInternal(Connection::None);
-}
-
-void SProcessor::disconnectInternal(Connection cause) { // @todo
- Connection intOldConnectionStatus = mConnectionStatus;
-
- mConnectionStatus = cause;
- switch (mConnectionStatus) {
- case Connection::Lost:
- break;
- case Connection::None: {
- Message::Disconnect sMDisconnect;
- // sendSPITMessage(sMDisconnect);
- } break;
- case Connection::NoneServer:
- break;
- default:
- break;
- }
-
- // stopReceiveSPITMessages();
- mCallbacks.onConnectionStatus(mServerID, mServerComputerName, mServerName, mServerStepTime,
- mConnectionStatus, intOldConnectionStatus);
-
- if (intOldConnectionStatus != Connection::None && intOldConnectionStatus != Connection::NoneServer) {
- ESP_LOGI(TAG, "eventConnectionStatus %d ", (int)mConnectionStatus);
- switch (mConnectionStatus) {
- case SProcessor::Connection::None: // @todo
- ESP_LOGD(TAG, "not connected");
- break;
- case SProcessor::Connection::NoneServer: // @todo
- ESP_LOGD(TAG, "connection terminated by server");
- // call eventProjectClosed because this may not be sended by the server,
- // when the connection is closed
- mCallbacks.onProjectUpdate(ProjUpdate::ServerClosed, mServerProjectID);
-
- // Server has terminated the connection -> start a new game
- // _doReconnect = false;
- startServerAutoDetect();
- break;
- case SProcessor::Connection::Lost: // @todo
- ESP_LOGD(TAG, "connection lost");
- // Maybe you want to reconnect, see eventServerDetected(...)
- // We have lost the connection -> set the flag to true and start the autodetection to reconnect at eventServerDetected(...)
- // _doReconnect = true;
- startServerAutoDetect();
- break;
- default:
- break;
- }
- }
-}
-
-void SProcessor::parseConnectAnswer(Message::ConnectAnswer &message) { // @todo
- if (message.getClientID() != mGuid)
- return;
-
- mServerID = message.getServerID();
- mServerComputerName = message.getServerComputerName();
- mServerName = message.getServerName();
- mServerStepTime = message.getStepTime();
-
- if (message.getConnected() == false) {
- disconnectInternal(Connection::NoneServer);
- } else {
- message.getStepTime();
- mConnectionStatus = Connection::Ok;
- mDisconnectedByServer = false;
- ESP_LOGD(TAG, "connection established");
- stopServerAutoDetect(); // normally you should stop the autodetection before you try a connection
- // This is redundand
- // mStopReceiveMessages = false;
-
- // Maybe you want to reconnect, see eventServerDetected(...)
- // Here the connection is established -> don't reconnect at eventServerDetected(...)
- // _doReconnect = false;
- }
-}
-
-/**
- * The SPIT server was closed
- * @param message
- */
-void SProcessor::parseDisconnect(Message::Disconnect &message) { // @todo
- Connection intCauseDisconnect = Connection::NoneServer;
- /*
- function o_Callable = bind(&SProcessor::disconnectInternal, this, intCauseDisconnect); // @todo
- SPIT_Handler::addCallable(o_Callable);
- */
- mDisconnectedByServer = true;
- SProcessor::disconnectInternal(intCauseDisconnect); // @todo
-}
-
-//----- Watchdog ------
-/**
- * The SPIT server sends a watchdog message at regular intervals. The client responds immediately with WatchdogAnswer
- * Conversely, the client also sends a watchdog message at regular intervals and waits for a WatchdogAnswer message.
- * This is used to check if the other side is still present.
- * @param message
- */
-void SProcessor::parseWatchdog(Message::Watchdog &message) { // @todo
- // ESP_LOGD(TAG, "parse Watchdog ");
- Message::WatchdogAnswer o_WatchdogAnswer;
- // sendSPITMessage(o_WatchdogAnswer);
-}
-/**
- * The SPIT server sends a watchdog message at regular intervals. The client responds immediately with WatchdogAnswer
- * Conversely, the client also sends a watchdog message at regular intervals and waits for a WatchdogAnswer message.
- * This is used to check if the other side is still present.
- * @param message
- */
-void SProcessor::parseWatchdogAnswer(Message::WatchdogAnswer &message) { // @todo
- answerWatchdog(); // is also done by parseMessage
-}
-void SProcessor::sendWatchdog() { // @todo
- int intResult{};
- Message::Watchdog message;
- // intResult = sendSPITMessage(message);
- if (intResult < 0) {
- ESP_LOGW("WDT", "Failed to send Watchdog msg");
- }
-}
-void SProcessor::eventWatchdogLost() { // @todo
- if (mConnectionStatus == Connection::TryConnection) {
- disconnectInternal(Connection::NoneServer);
- } else {
- disconnectInternal(Connection::Lost);
- }
-}
-
-//----- SPIT Project ------
-void SProcessor::parseReportProject(Message::ReportProject &message) { // @todo
- ESP_LOGD(TAG, "parse ReportProject");
- mServerProjectID = message.getProjectID();
- mServerProjectName = message.getProjectName();
- mServerFramesPerSecond = message.getFramesPerSecond();
- mCallbacks.onProjectUpdate(ProjUpdate::ServerLoaded, mServerProjectID);
-
- // Set all SPITTypes and SPITObjects confirmed = false
- SType::setConfirmedFalse(mSpitTypes);
- SObject::setConfirmedFalse(mSpitObjects);
-
- // Send RequestProjectTransfer
- Message::RequestProjectTransfer sMRequestProjectTransfer;
- // if (sendSPITMessage(sMRequestProjectTransfer) < 0) {
- // ESP_LOGD(TAG, "Client::parseReportProject could not send RequestProjectTransfer");
- // }
-
- // todo Don't send the ReportProject here it should be sended after parseEndProjectTransfer
- // Send client's ReportProject
- Message::ReportProject reportProject(mProjName, mProjName);
- reportProject.setFramesPerSecond(0);
- // if (sendSPITMessage(reportProject) < 0) {
- // ESP_LOGD(TAG, "Client::parseReportProject could not send Client's ReportProject");
- // }
-}
-void SProcessor::parseCloseProject(Message::CloseProject &p_CloseSPITProject) { // @todo
- ESP_LOGD(TAG, "parse CloseProject");
- string stringProjectID;
- mCallbacks.onProjectUpdate(ProjUpdate::ServerClosed, p_CloseSPITProject.getProjectID());
- SPlayer::clearPlayers();
-}
-
-string SProcessor::getServerProjectID() { return mServerProjectID; } // @todo
-string SProcessor::getServerProjectName() { return mServerProjectName; } // @todo
-int SProcessor::getServerFramesPerSecond() { return mServerFramesPerSecond; } // @todo
-
-void SProcessor::parseRequestProjectTransfer(Message::RequestProjectTransfer &message) { // @todo
- ESP_LOGD(TAG, "parse RequestProjectTransfer");
- // StartProjectTransfer
- Message::StartProjectTransfer sMStartProjectTransfer;
- // if (sendSPITMessage(sMStartProjectTransfer) < 0) {
- // return;
- // }
-
- // send all listes SPITTypes
- for (const auto& [key, value] : mSpitTypes.getRepo()) {
- sendSPITTypeInternal(*value);
- // fos::Task::delayMs(10);
- }
- for (auto& [key, value] : mSpitObjects.getRepo()) {
- sendSPITObjectInternal(value.get());
- // fos::Task::delayMs(10);
- }
-
- // EndProjectTransfer
- Message::EndProjectTransfer sMEndProjectTransfer;
- // sendSPITMessage(sMEndProjectTransfer);
-}
-
-/* NEW IMPLEMENTATION
-
-void SProcessor::parseRequestProjectTransfer(Message::RequestProjectTransfer* message) { // @todo
-// ESP_LOGD(TAG, "parse RequestProjectTransfer");
- thread* o_ThreadSend;
- o_ThreadSend = new thread(&this->sendProject, this);
- // int intResult;
- // Message::StartProjectTransfer* ptrSMStartProjectTransfer;
- // Message::EndProjectTransfer* ptrSMEndProjectTransfer;
- // int intCount;
- // SPITType* ptrSPITType;
- // SObject* ptrSPITObject;
-
-
- // //StartProjectTransfer
- // NotifyStartProjectTransfer_Client* o_RunnableStart = new NotifyStartProjectTransfer_Client(mSPITClientInterface);
- // SPIT_Handler::addRunnable(o_RunnableStart);
-
- // ptrSMStartProjectTransfer = new Message::StartProjectTransfer();
- // intResult = sendSPITMessage(ptrSMStartProjectTransfer);
- // if (intResult < 0) {
- // return;
- // }
- // mWatchdog->answerWatchdog();
- // {
- // //send all listes SPITTypes
- // unique_lock o_LockType(*SPITType::getMutex());
- // intCount = SPITType::getSPITTypeCount();
- // for (int i = 0; i < intCount; i++) {
- // ptrSPITType = mSpitTypes.getEntry(i);
- // if (ptrSPITType == nullptr) continue;
- // intResult = sendSPITTypeInternal(ptrSPITType);
- // if (intResult < 0) return;
- // mWatchdog->answerWatchdog();
- // this_thread::sleep_for(chrono::milliseconds(7));
- // }
- // }
-
- // {
- // unique_lock o_LockObject(*SObject::getMutex());
- // intCount = mSpitObjects.getEntryCount();
- // for (int i = 0; i < intCount; i++) {
- // ptrSPITObject = mSpitObjects.getEntry(i);
- // if (ptrSPITObject == nullptr) continue;
- // intResult = sendSPITObjectInternal(ptrSPITObject);
- // if (intResult < 0) return;
- // mWatchdog->answerWatchdog();
- // this_thread::sleep_for(chrono::milliseconds(7));
- // }
- // }
-
- // //EndProjectTransfer
- // ptrSMEndProjectTransfer = new Message::EndProjectTransfer();
- // intResult = sendSPITMessage(ptrSMEndProjectTransfer);
- // if (intResult < 0) {
- // return;
- // }
- // mWatchdog->answerWatchdog();
- // NotifyEndProjectTransfer_Client* o_RunnableEnd = new NotifyEndProjectTransfer_Client(mSPITClientInterface);
- // SPIT_Handler::addRunnable(o_RunnableEnd);
-
- // //Send act
-}
-*/
-
-// void SProcessor::sendProject(SClient *p_PtrSPIT_Client) { // @todo
- // int intResult;
- // Message::StartProjectTransfer* ptrSMStartProjectTransfer;
- // Message::EndProjectTransfer* ptrSMEndProjectTransfer;
- // int intCount;
- // SPITType* ptrSPITType;
- // SObject* ptrSPITObject;
-
- // //StartProjectTransfer
- // NotifyStartProjectTransfer_Client* o_RunnableStart = new NotifyStartProjectTransfer_Client(p_PtrSPIT_Client->getSPITClientInterface());
- // SPIT_Handler::addRunnable(o_RunnableStart);
-
- // ptrSMStartProjectTransfer = new Message::StartProjectTransfer();
- // intResult = p_PtrSPIT_Client->sendSPITMessage(ptrSMStartProjectTransfer);
- // if (intResult < 0) {
- // return;
- // }
-
- // // mWatchdog->answerWatchdog();
- // // {
- // //send all listes SPITTypes
- // // unique_lock o_LockType(*SPITType::getMutex());
- // intCount = SPITType::getSPITTypeCount();
- // for (int i = 0; i < intCount; i++) {
- // ptrSPITType = mSpitTypes.getEntry(i);
- // if (ptrSPITType == nullptr) continue;
- // if (ptrSPITType->getCreatedByClient() == false) continue;
- // intResult = p_PtrSPIT_Client->sendSPITTypeInternal(ptrSPITType);
- // if (intResult < 0) return;
- // // mWatchdog->answerWatchdog();
- // this_thread::sleep_for(chrono::milliseconds(7));
- // }
- // // }
-
- // // {
- // // unique_lock o_LockObject(*SObject::getMutex());
- // intCount = mSpitObjects.getEntryCount();
- // for (int i = 0; i < intCount; i++) {
- // ptrSPITObject = mSpitObjects.getEntry(i);
- // if (ptrSPITObject == nullptr) continue;
- // if (ptrSPITObject->getCreatedByClient() == false) continue;
- // intResult = p_PtrSPIT_Client->sendSPITObjectInternal(ptrSPITObject);
- // if (intResult < 0) return;
- // // mWatchdog->answerWatchdog();
- // this_thread::sleep_for(chrono::milliseconds(7));
- // }
- // // }
-
- // //EndProjectTransfer
- // ptrSMEndProjectTransfer = new Message::EndProjectTransfer();
- // intResult = p_PtrSPIT_Client->sendSPITMessage(ptrSMEndProjectTransfer);
- // if (intResult < 0) {
- // return;
- // }
- // // mWatchdog->answerWatchdog();
- // NotifyEndProjectTransfer_Client* o_RunnableEnd = new NotifyEndProjectTransfer_Client(p_PtrSPIT_Client->getSPITClientInterface());
- // SPIT_Handler::addRunnable(o_RunnableEnd);
-
- // //Send act
+// /**
+// * If a SPITServer is not more found, this function is called.
+// * To do so the SAD_Client ServerAutoDetect has to be startet - see SAD_Client::startServerAutoDetect.
+// */
+// void SProcessor::eventServerLost(SadDetectedServer &server) {
+// mCallbacks.onServerEvent(ServerEvent::Lost, server);
// }
-void SProcessor::parseStartProjectTransfer(Message::StartProjectTransfer &message) { // @todo
- mCallbacks.onProjectUpdate(ProjUpdate::StartTransfer, mServerProjectID);
-}
-void SProcessor::parseEndProjectTransfer(Message::EndProjectTransfer &message) { // @todo
- SObject::clearUnconfirmedObjects(mSpitObjects);
- mCallbacks.onProjectUpdate(ProjUpdate::EndTransfer, mServerProjectID);
+// void SProcessor::eventServerChanged(SadDetectedServer &server) {
+// mCallbacks.onServerEvent(ServerEvent::Changed, server);
+// // tryConnection(detectedServer);
+// }
- // Send Message::ReportProject after the mSPITClientInterface is notfied of EndProjectTransfer
- Message::ReportProject reportSPITProject(mProjName, mProjName);
- reportSPITProject.setFramesPerSecond(0);
- // if (sendSPITMessage(reportSPITProject) < 0) {
- // ESP_LOGD(TAG, "Client::parseReportProject could not send Client's ReportProject");
- // }
-}
+// // void MyApp::tryConnection(const SadDetectedServer &detected) {
+// // // fetch the infoemations from the detected
+// // bool boolSuccess = false;
+// // bool boolPossibleConnect = checkPossibleConnection(detected);
-//----- SPIT Types ------
-void SProcessor::parseReportType(Message::ReportType &message) { // @todo
- ESP_LOGD(TAG, "parse ReportType ID %s Name %s",message.getID().c_str(), message.getName().c_str());
+// // if (boolPossibleConnect == false)
+// // return;
+
+// // // --------------------------------------
+// // // You have three Options to use the detected server
+// // // OPTION 1 Use the first server found
+// // // OPTION 2 Use the first server found that fulfills specific conditions
+// // // OPTION 3 take a copy of the detected and do connection later
+// // // SadDetectedServer o_DetectedServer = detected; //this will call the copy constructor
+// // // ---------------------------------------
+
+// // // Excample use the first detected LOOPBACK server, means the server runs on the same computer as this client
+// // // if (detected.getIpIsLoopback() == true) { //omit the if condition if you want to use the first server found
+
+// // boolSuccess = false;
+// // // Stop auto detection because a suitable server was found
+// // stopServerAutoDetect();
+// // if (mSPIT_Client != nullptr) {
+// // mServerProjectName = detected.getProjectName();
+// // mServerIP = detected.getIP();
+
+// // #if defined(DEBUGOUTPUT)
+// // ESP_LOGD(TAG, "MySPITApp: connect to %s ", detected.getIP().data());
+// // #endif
+// // // Use the mBoardNumber as login name
+// // string stringLoginName = "";
+// // string stringLoginPassword = "";
+// // boolSuccess = mSPIT_Client->connect(detected.getIP(), detected.getPort(), detected.getClientIP(), stringLoginName, stringLoginPassword); // ClientPort = "0" meeans use any port
+// // }
+// // if (boolSuccess == false) {
+// // // connection message could not be sent
+// // // perhaps restart AutoDetection
+// // startServerAutoDetect();
+// // } else {
+// // // WAITING FOR CONNECTION ANSWER
+// // // If the Server is closed in the meantime no answer will return
+// // //-> connect(..) has started the watchdog
+// // }
+
+// // // } //Excample
+// // }
+
+// std::vector SProcessor::createMessage(Message::OPPart &opPart) {
+// if (mMessageNumberSend == 255)
+// mMessageNumberSend = 1;
+// else
+// mMessageNumberSend++;
+// opPart.setMessageNumber(mMessageNumberSend);
+// opPart.setServerInfoInHeader(mGuid, mServerID);
+
+// int opFlag = opPart.getHeader()->getType();
+// try {
+// return Message::createMessage(opPart);
+// } catch (...) {
+// ESP_LOGD(TAG, "Exception client OPFlag: %d", opFlag);
+// }
+// return {};
+// }
+// // todo Delete SProcessor::sendSPITMessage(Message::OPPart &opPart
+
+// // void SProcessor::receiveSPITMessage(SClient &rM) {
+// // char buffer[MAXSPITMESSAGEBYTECOUNT + 1];
+// // int rdLen;
+// // while (rM.mStopReceiveMessages == false) {
+// // rdLen = rM.mSocket.receiveMessage(buffer, MAXSPITMESSAGEBYTECOUNT, nullptr);
+// // if (rdLen < 0) {
+// // if (rM.mStopReceiveMessages) {
+// // return;
+// // }
+// // continue;
+// // }
+// // auto vec = vector(buffer, buffer + rdLen);
+// // rM.checkParseMessageData(move(spitMsg));
+// // // rM.checkParseMessage(move(spitMsg));
+// // }
+// // }
+
+// void SProcessor::resetMessageNumberReceived() {
+// mMessageNumberReceived = -1;
+// mOvertakingMessages.clear();
+// }
+
+// void SProcessor::checkParseMessageData(vector data) {
+// auto message = make_unique(data);
+// answerWatchdog();
+// if (!message->getHeader() || !message->getOPPart()) {
+// ESP_LOGD(TAG, "Client::parseMessage incomplete message");
+// return;
+// }
+
+// int msgNum = (int)(message->getHeader()->getMessageNumber() & 0xFF);
+
+// if (msgNum == 0) {
+// parseMessage(*message);
+// return;
+// }
+// if (mMessageNumberReceived < 0) {
+// mMessageNumberReceived = msgNum;
+// parseMessage(*message);
+// return;
+// }
+
+// int msgNumNext = mMessageNumberReceived + 1;
+// if (msgNumNext > 255 || msgNumNext < 1)
+// msgNumNext = 1;
+
+// if (msgNum == msgNumNext) {
+// mMessageNumberReceived = msgNum;
+// parseMessage(*message);
+
+// // check overtaking messages
+// auto it = mOvertakingMessages.begin();
+// while (mOvertakingMessages.size() > 0) {
+
+// msgNumNext = mMessageNumberReceived + 1;
+// if (msgNumNext > 255 || msgNumNext < 1)
+// msgNumNext = 1;
+
+// auto &overtakingMessage = *it;
+// msgNum = (int)(overtakingMessage->getHeader()->getMessageNumber() & 0xFF);
+
+// if (msgNum == msgNumNext) {
+// mMessageNumberReceived = msgNum;
+// parseMessage(*overtakingMessage);
+// mOvertakingMessages.erase(it);
+
+// it = mOvertakingMessages.begin();
+// } else {
+// break;
+// }
+// }
+
+// } else {
+// // p_SPITMessage has overtaken another message
+// addOvertakingMessage(move(message));
+// }
+// }
+
+// void SProcessor::addOvertakingMessage(unique_ptr message) {
+// if (!message) {
+// return;
+// }
+// if (mOvertakingMessages.size() > MAX_OVERTAKING_SPIT_MESSAGES) {
+// ESP_LOGD(TAG, "Client receiveing: perhaps message lost !!!!!");
+// }
+
+// int intMessageNumber = (int)(message->getHeader()->getMessageNumber() & 0xFF);
+// for (auto it = mOvertakingMessages.begin(); it != mOvertakingMessages.end(); ++it) {
+// const auto &overtaking = *it;
+// int intOvertakingMessageNumber = (int)(overtaking->getHeader()->getMessageNumber() & 0xFF);
+// if (intMessageNumber < intOvertakingMessageNumber) {
+// mOvertakingMessages.insert(it, move(message));
+// return;
+// }
+// }
+// mOvertakingMessages.push_back(move(message));
+// }
+
+// void SProcessor::parseMessage(Message& message) {
+// answerWatchdog();
+// if (!message.getHeader() || !message.getOPPart()) {
+// ESP_LOGD(TAG, "Client::parseMessage incomplete message");
+// return;
+// }
+
+// switch (message.getType()) {
+// //----- Connection -----
+// case Message::ConnectAnswer::OPFLAG:
+// parseConnectAnswer(message.getAs());
+// break;
+// case Message::Disconnect::OPFLAG:
+// parseDisconnect(message.getAs());
+// break;
+// case Message::ReportProject::OPFLAG:
+// parseReportProject(message.getAs());
+// break;
+// case Message::Watchdog::OPFLAG:
+// parseWatchdog(message.getAs());
+// break;
+// case Message::WatchdogAnswer::OPFLAG:
+// parseWatchdogAnswer(message.getAs());
+// break;
+// //----- SPIT Project -----
+// case Message::StartProjectTransfer::OPFLAG:
+// parseStartProjectTransfer(message.getAs());
+// break;
+// case Message::CloseProject::OPFLAG:
+// parseCloseProject(message.getAs());
+// break;
+// case Message::RequestProjectTransfer::OPFLAG:
+// parseRequestProjectTransfer(message.getAs());
+// break;
+// case Message::EndProjectTransfer::OPFLAG:
+// parseEndProjectTransfer(message.getAs());
+// break;
+// //----- SPIT Types ------
+// case Message::ReportType::OPFLAG:
+// parseReportType(message.getAs());
+// break;
+// case Message::RemoveType::OPFLAG:
+// parseRemoveSPITType(message.getAs());
+// //----- SPIT Objects ------
+// break;
+// case Message::ReportObject::OPFLAG:
+// parseReportSPITObject(message.getAs());
+// break;
+// case Message::RemoveObject::OPFLAG:
+// parseRemoveSPITObject(message.getAs());
+// break;
+// //----- Play SPIT Objects ------
+// case Message::PlayStart::OPFLAG:
+// parsePlaySPITStart(message.getAs());
+// break;
+// case Message::PlayObject::OPFLAG:
+// parsePlaySPITObject(message.getAs());
+// break;
+// case Message::PlayEnd::OPFLAG:
+// parsePlaySPITEnd(message.getAs());
+// break;
+// case Message::ReportPlayStatus::OPFLAG:
+// parseReportPlayStatus(message.getAs());
+// break;
+// default:
+// ESP_LOGD(TAG, "Client::parseMessage: Unknown Message");
+// }
+// }
+
+// //----- Connection ------
+// /**
+// * Tries to connect to a SPITServer.
+// * @param serverIP the ip address of the SPIT server
+// * @param serverPort the port number of the SPIT server
+// * @param clientIP the local IP address of the client
+// * @param clientPort the port number of the Client, if "0" the OS uses any possible port number
+// * @param loginName login user name (liveSHOW does not use this -> mayby ""
+// * @param loginPassword login user password (liveSHOW does not use this -> mayby ""
+// * @return false = an error has occured, true = the connect was sent to the server
+// */
+// bool SProcessor::connect(string serverIP, string serverPort, string clientIP, string clientPort, string loginName, string loginPassword) {
+// disconnect();
+// // mSocket.setConnectionParams(serverIP, serverPort, clientIP, clientPort);
+// // if (mSocket.bindSocket(clientIP, clientPort) < 0) {
+// // mStopReceiveMessages = true;
+// // return false;
+// // }
+// Message::Connect sMConnect(mComputerName, mName);
+// sMConnect.setLoginName(loginName);
+// sMConnect.setLoginPassword(loginPassword);
+// sMConnect.setServerIP(serverIP);
+// if (serverPort.length() <= 0) {
+// serverPort = "0";
+// }
+// int intServerPort = stoi(serverPort);
+// sMConnect.setServerPort(intServerPort);
+
+// // if (startReceiveSPITMessages() == false) {
+// // mStopReceiveMessages = true;
+// // return false;
+// // }
+// resetMessageNumberReceived();
+// Connection intOldConnectionStatus = mConnectionStatus;
+
+// mConnectionStatus = Connection::TryConnection;
+// mCallbacks.onConnectionStatus(mServerID, mServerComputerName, mServerName, mServerStepTime,
+// mConnectionStatus, intOldConnectionStatus);
+
+// // sleep a little to make sure that the reception of the messages is started
+// // fos::Task::delayMs(500);
+// // if (sendSPITMessage(sMConnect) < 0) {
+// // mConnectionStatus = Connection::None;
+// // mStopReceiveMessages = true;
+// // return false;
+// // }
+// return true;
+// }
+
+// /**
+// * Terminates the connection to the SPITServer.
+// */
+// void SProcessor::disconnect() {
+// disconnectInternal(Connection::None);
+// }
+
+// void SProcessor::disconnectInternal(Connection cause) {
+// Connection intOldConnectionStatus = mConnectionStatus;
+
+// mConnectionStatus = cause;
+// switch (mConnectionStatus) {
+// case Connection::Lost:
+// break;
+// case Connection::None: {
+// Message::Disconnect sMDisconnect;
+// // sendSPITMessage(sMDisconnect);
+// } break;
+// case Connection::NoneServer:
+// break;
+// default:
+// break;
+// }
+
+// // stopReceiveSPITMessages();
+// mCallbacks.onConnectionStatus(mServerID, mServerComputerName, mServerName, mServerStepTime,
+// mConnectionStatus, intOldConnectionStatus);
+
+// if (intOldConnectionStatus != Connection::None && intOldConnectionStatus != Connection::NoneServer) {
+// ESP_LOGI(TAG, "eventConnectionStatus %d ", (int)mConnectionStatus);
+// switch (mConnectionStatus) {
+// case SProcessor::Connection::None:
+// ESP_LOGD(TAG, "not connected");
+// break;
+// case SProcessor::Connection::NoneServer:
+// ESP_LOGD(TAG, "connection terminated by server");
+// // call eventProjectClosed because this may not be sended by the server,
+// // when the connection is closed
+// mCallbacks.onProjectUpdate(ProjUpdate::ServerClosed, mServerProjectID);
+
+// // Server has terminated the connection -> start a new game
+// // _doReconnect = false;
+// startServerAutoDetect();
+// break;
+// case SProcessor::Connection::Lost:
+// ESP_LOGD(TAG, "connection lost");
+// // Maybe you want to reconnect, see eventServerDetected(...)
+// // We have lost the connection -> set the flag to true and start the autodetection to reconnect at eventServerDetected(...)
+// // _doReconnect = true;
+// startServerAutoDetect();
+// break;
+// default:
+// break;
+// }
+// }
+// }
+
+// void SProcessor::parseConnectAnswer(Message::ConnectAnswer &message) {
+// if (message.getClientID() != mGuid)
+// return;
+
+// mServerID = message.getServerID();
+// mServerComputerName = message.getServerComputerName();
+// mServerName = message.getServerName();
+// mServerStepTime = message.getStepTime();
+
+// if (message.getConnected() == false) {
+// disconnectInternal(Connection::NoneServer);
+// } else {
+// message.getStepTime();
+// mConnectionStatus = Connection::Ok;
+// mDisconnectedByServer = false;
+// ESP_LOGD(TAG, "connection established");
+// stopServerAutoDetect(); // normally you should stop the autodetection before you try a connection
+// // This is redundand
+// // mStopReceiveMessages = false;
+
+// // Maybe you want to reconnect, see eventServerDetected(...)
+// // Here the connection is established -> don't reconnect at eventServerDetected(...)
+// // _doReconnect = false;
+// }
+// }
+
+// /**
+// * The SPIT server was closed
+// * @param message
+// */
+// void SProcessor::parseDisconnect(Message::Disconnect &message) {
+// Connection intCauseDisconnect = Connection::NoneServer;
+// /*
+// function o_Callable = bind(&SProcessor::disconnectInternal, this, intCauseDisconnect);
+// SPIT_Handler::addCallable(o_Callable);
+// */
+// mDisconnectedByServer = true;
+// SProcessor::disconnectInternal(intCauseDisconnect);
+// }
+
+// //----- Watchdog ------
+// /**
+// * The SPIT server sends a watchdog message at regular intervals. The client responds immediately with WatchdogAnswer
+// * Conversely, the client also sends a watchdog message at regular intervals and waits for a WatchdogAnswer message.
+// * This is used to check if the other side is still present.
+// * @param message
+// */
+// void SProcessor::parseWatchdog(Message::Watchdog &message) {
+// // ESP_LOGD(TAG, "parse Watchdog ");
+// Message::WatchdogAnswer o_WatchdogAnswer;
+// // sendSPITMessage(o_WatchdogAnswer);
+// }
+// /**
+// * The SPIT server sends a watchdog message at regular intervals. The client responds immediately with WatchdogAnswer
+// * Conversely, the client also sends a watchdog message at regular intervals and waits for a WatchdogAnswer message.
+// * This is used to check if the other side is still present.
+// * @param message
+// */
+// void SProcessor::parseWatchdogAnswer(Message::WatchdogAnswer &message) {
+// answerWatchdog(); // is also done by parseMessage
+// }
+// void SProcessor::sendWatchdog() {
+// int intResult{};
+// Message::Watchdog message;
+// // intResult = sendSPITMessage(message);
+// if (intResult < 0) {
+// ESP_LOGW("WDT", "Failed to send Watchdog msg");
+// }
+// }
+// void SProcessor::eventWatchdogLost() {
+// if (mConnectionStatus == Connection::TryConnection) {
+// disconnectInternal(Connection::NoneServer);
+// } else {
+// disconnectInternal(Connection::Lost);
+// }
+// }
+
+// //----- SPIT Project ------
+// void SProcessor::parseReportProject(Message::ReportProject &message) {
+// ESP_LOGD(TAG, "parse ReportProject");
+// mServerProjectID = message.getProjectID();
+// mServerProjectName = message.getProjectName();
+// mServerFramesPerSecond = message.getFramesPerSecond();
+// mCallbacks.onProjectUpdate(ProjUpdate::ServerLoaded, mServerProjectID);
+
+// // Set all SPITTypes and SPITObjects confirmed = false
+// SType::setConfirmedFalse(mSpitTypes);
+// SObject::setConfirmedFalse(mSpitObjects);
+
+// // Send RequestProjectTransfer
+// Message::RequestProjectTransfer sMRequestProjectTransfer;
+// // if (sendSPITMessage(sMRequestProjectTransfer) < 0) {
+// // ESP_LOGD(TAG, "Client::parseReportProject could not send RequestProjectTransfer");
+// // }
+
+// // todo Don't send the ReportProject here it should be sended after parseEndProjectTransfer
+// // Send client's ReportProject
+// Message::ReportProject reportProject(mProjName, mProjName);
+// reportProject.setFramesPerSecond(0);
+// // if (sendSPITMessage(reportProject) < 0) {
+// // ESP_LOGD(TAG, "Client::parseReportProject could not send Client's ReportProject");
+// // }
+// }
+// void SProcessor::parseCloseProject(Message::CloseProject &p_CloseSPITProject) {
+// ESP_LOGD(TAG, "parse CloseProject");
+// string stringProjectID;
+// mCallbacks.onProjectUpdate(ProjUpdate::ServerClosed, p_CloseSPITProject.getProjectID());
+// SPlayer::clearPlayers();
+// }
+
+// string SProcessor::getServerProjectID() { return mServerProjectID; }
+// string SProcessor::getServerProjectName() { return mServerProjectName; }
+// int SProcessor::getServerFramesPerSecond() { return mServerFramesPerSecond; }
+
+// void SProcessor::parseRequestProjectTransfer(Message::RequestProjectTransfer &message) {
+// ESP_LOGD(TAG, "parse RequestProjectTransfer");
+// // StartProjectTransfer
+// Message::StartProjectTransfer sMStartProjectTransfer;
+// // if (sendSPITMessage(sMStartProjectTransfer) < 0) {
+// // return;
+// // }
+
+// // send all listes SPITTypes
+// for (const auto& [key, value] : mSpitTypes.getRepo()) {
+// sendSPITTypeInternal(*value);
+// // fos::Task::delayMs(10);
+// }
+// for (auto& [key, value] : mSpitObjects.getRepo()) {
+// sendSPITObjectInternal(value.get());
+// // fos::Task::delayMs(10);
+// }
+
+// // EndProjectTransfer
+// Message::EndProjectTransfer sMEndProjectTransfer;
+// // sendSPITMessage(sMEndProjectTransfer);
+// }
+
+// /* NEW IMPLEMENTATION
+
+// void SProcessor::parseRequestProjectTransfer(Message::RequestProjectTransfer* message) {
+// // ESP_LOGD(TAG, "parse RequestProjectTransfer");
+// thread* o_ThreadSend;
+// o_ThreadSend = new thread(&this->sendProject, this);
+// // int intResult;
+// // Message::StartProjectTransfer* ptrSMStartProjectTransfer;
+// // Message::EndProjectTransfer* ptrSMEndProjectTransfer;
+// // int intCount;
+// // SPITType* ptrSPITType;
+// // SObject* ptrSPITObject;
+
+// // //StartProjectTransfer
+// // NotifyStartProjectTransfer_Client* o_RunnableStart = new NotifyStartProjectTransfer_Client(mSPITClientInterface);
+// // SPIT_Handler::addRunnable(o_RunnableStart);
+
+// // ptrSMStartProjectTransfer = new Message::StartProjectTransfer();
+// // intResult = sendSPITMessage(ptrSMStartProjectTransfer);
+// // if (intResult < 0) {
+// // return;
+// // }
+// // mWatchdog->answerWatchdog();
+// // {
+// // //send all listes SPITTypes
+// // unique_lock o_LockType(*SPITType::getMutex());
+// // intCount = SPITType::getSPITTypeCount();
+// // for (int i = 0; i < intCount; i++) {
+// // ptrSPITType = mSpitTypes.getEntry(i);
+// // if (ptrSPITType == nullptr) continue;
+// // intResult = sendSPITTypeInternal(ptrSPITType);
+// // if (intResult < 0) return;
+// // mWatchdog->answerWatchdog();
+// // this_thread::sleep_for(chrono::milliseconds(7));
+// // }
+// // }
+
+// // {
+// // unique_lock o_LockObject(*SObject::getMutex());
+// // intCount = mSpitObjects.getEntryCount();
+// // for (int i = 0; i < intCount; i++) {
+// // ptrSPITObject = mSpitObjects.getEntry(i);
+// // if (ptrSPITObject == nullptr) continue;
+// // intResult = sendSPITObjectInternal(ptrSPITObject);
+// // if (intResult < 0) return;
+// // mWatchdog->answerWatchdog();
+// // this_thread::sleep_for(chrono::milliseconds(7));
+// // }
+// // }
+
+// // //EndProjectTransfer
+// // ptrSMEndProjectTransfer = new Message::EndProjectTransfer();
+// // intResult = sendSPITMessage(ptrSMEndProjectTransfer);
+// // if (intResult < 0) {
+// // return;
+// // }
+// // mWatchdog->answerWatchdog();
+// // NotifyEndProjectTransfer_Client* o_RunnableEnd = new NotifyEndProjectTransfer_Client(mSPITClientInterface);
+// // SPIT_Handler::addRunnable(o_RunnableEnd);
+
+// // //Send act
+// }
+// */
+
+// // void SProcessor::sendProject(SClient *p_PtrSPIT_Client) {
+// // int intResult;
+// // Message::StartProjectTransfer* ptrSMStartProjectTransfer;
+// // Message::EndProjectTransfer* ptrSMEndProjectTransfer;
+// // int intCount;
+// // SPITType* ptrSPITType;
+// // SObject* ptrSPITObject;
+
+// // //StartProjectTransfer
+// // NotifyStartProjectTransfer_Client* o_RunnableStart = new NotifyStartProjectTransfer_Client(p_PtrSPIT_Client->getSPITClientInterface());
+// // SPIT_Handler::addRunnable(o_RunnableStart);
+
+// // ptrSMStartProjectTransfer = new Message::StartProjectTransfer();
+// // intResult = p_PtrSPIT_Client->sendSPITMessage(ptrSMStartProjectTransfer);
+// // if (intResult < 0) {
+// // return;
+// // }
+
+// // // mWatchdog->answerWatchdog();
+// // // {
+// // //send all listes SPITTypes
+// // // unique_lock o_LockType(*SPITType::getMutex());
+// // intCount = SPITType::getSPITTypeCount();
+// // for (int i = 0; i < intCount; i++) {
+// // ptrSPITType = mSpitTypes.getEntry(i);
+// // if (ptrSPITType == nullptr) continue;
+// // if (ptrSPITType->getCreatedByClient() == false) continue;
+// // intResult = p_PtrSPIT_Client->sendSPITTypeInternal(ptrSPITType);
+// // if (intResult < 0) return;
+// // // mWatchdog->answerWatchdog();
+// // this_thread::sleep_for(chrono::milliseconds(7));
+// // }
+// // // }
+
+// // // {
+// // // unique_lock o_LockObject(*SObject::getMutex());
+// // intCount = mSpitObjects.getEntryCount();
+// // for (int i = 0; i < intCount; i++) {
+// // ptrSPITObject = mSpitObjects.getEntry(i);
+// // if (ptrSPITObject == nullptr) continue;
+// // if (ptrSPITObject->getCreatedByClient() == false) continue;
+// // intResult = p_PtrSPIT_Client->sendSPITObjectInternal(ptrSPITObject);
+// // if (intResult < 0) return;
+// // // mWatchdog->answerWatchdog();
+// // this_thread::sleep_for(chrono::milliseconds(7));
+// // }
+// // // }
+
+// // //EndProjectTransfer
+// // ptrSMEndProjectTransfer = new Message::EndProjectTransfer();
+// // intResult = p_PtrSPIT_Client->sendSPITMessage(ptrSMEndProjectTransfer);
+// // if (intResult < 0) {
+// // return;
+// // }
+// // // mWatchdog->answerWatchdog();
+// // NotifyEndProjectTransfer_Client* o_RunnableEnd = new NotifyEndProjectTransfer_Client(p_PtrSPIT_Client->getSPITClientInterface());
+// // SPIT_Handler::addRunnable(o_RunnableEnd);
+
+// // //Send act
+// // }
+
+// void SProcessor::parseStartProjectTransfer(Message::StartProjectTransfer &message) {
+// mCallbacks.onProjectUpdate(ProjUpdate::StartTransfer, mServerProjectID);
+// }
+// void SProcessor::parseEndProjectTransfer(Message::EndProjectTransfer &message) {
+// SObject::clearUnconfirmedObjects(mSpitObjects);
+// mCallbacks.onProjectUpdate(ProjUpdate::EndTransfer, mServerProjectID);
+
+// // Send Message::ReportProject after the mSPITClientInterface is notfied of EndProjectTransfer
+// Message::ReportProject reportSPITProject(mProjName, mProjName);
+// reportSPITProject.setFramesPerSecond(0);
+// // if (sendSPITMessage(reportSPITProject) < 0) {
+// // ESP_LOGD(TAG, "Client::parseReportProject could not send Client's ReportProject");
+// // }
+// }
+
+void SProcessor::parseReportType(Message::ReportType &message) {
+ ESP_LOGD(TAG, "parse ReportType ID %s Name %s", message.getID().c_str(), message.getName().c_str());
SType *sType;
bool boolNew = false;
bool boolChanged = false;
@@ -778,7 +777,7 @@ void SProcessor::parseReportType(Message::ReportType &message) { // @todo
if (sType) {
createdByClient = sType->getCreatedByClient();
}
-
+
if (mCallbacks.onCheckSpitTypeVeto(false, createdByClient) == false) {
ESP_LOGW(TAG, "TypeVeto %s / %s", message.getID().c_str(), message.getName().c_str());
return;
@@ -799,7 +798,7 @@ void SProcessor::parseReportType(Message::ReportType &message) { // @todo
}
if (!sType->setMessageOP(message)) {
// SPITType is not changable -> send back to the server
- sendSPITTypeInternal(*sType);
+ mInternCallbacks.sendSpitTypeInternal(*sType);
return;
}
@@ -809,427 +808,425 @@ void SProcessor::parseReportType(Message::ReportType &message) { // @todo
if (sType != nullptr) {
if (sType->setConfirmed(true) == true || boolChanged == true) {
- sendSPITTypeInternal(*sType);
+ mInternCallbacks.sendSpitTypeInternal(*sType);
}
}
}
}
-void SProcessor::parseRemoveSPITType(Message::RemoveType &message) { // @todo
- ESP_LOGD(TAG, "parse RemoveType %s", message.getID().c_str());
- bool boolRemote = false;
- string stringSPITTypeID = message.getID();
+// void SProcessor::parseRemoveSPITType(Message::RemoveType &message) {
+// ESP_LOGD(TAG, "parse RemoveType %s", message.getID().c_str());
+// bool boolRemote = false;
+// string stringSPITTypeID = message.getID();
- SType *ptrSPITType = mRemoteSpitTypes.getEntry(stringSPITTypeID);
- if (!ptrSPITType) {
- boolRemote = true;
- } else {
- ptrSPITType = mSpitTypes.getEntry(stringSPITTypeID);
- if (!ptrSPITType) {
- boolRemote = false;
- } else {
- // No SPITType with stringSPITTypeID is listet
- return;
- }
- }
+// SType *ptrSPITType = mRemoteSpitTypes.getEntry(stringSPITTypeID);
+// if (!ptrSPITType) {
+// boolRemote = true;
+// } else {
+// ptrSPITType = mSpitTypes.getEntry(stringSPITTypeID);
+// if (!ptrSPITType) {
+// boolRemote = false;
+// } else {
+// // No SPITType with stringSPITTypeID is listet
+// return;
+// }
+// }
- if (ptrSPITType->getCreatedByClient() && ptrSPITType->Fixed.get()) {
- // the SPITyte is created by client himself and it is fixed -> don't remove the SPITType!!
- // Send the SPITTyp back to the server
- sendSPITTypeInternal(*ptrSPITType);
- return;
- }
+// if (ptrSPITType->getCreatedByClient() && ptrSPITType->Fixed.get()) {
+// // the SPITyte is created by client himself and it is fixed -> don't remove the SPITType!!
+// // Send the SPITTyp back to the server
+// sendSPITTypeInternal(*ptrSPITType);
+// return;
+// }
- mCallbacks.onSpitType(ObjectEvent::Deleted, boolRemote, *ptrSPITType);
- if (boolRemote == false) {
- mSpitTypes.removeEntry(*ptrSPITType);
- } else {
- mRemoteSpitTypes.removeEntry(*ptrSPITType);
- }
-}
+// mCallbacks.onSpitType(ObjectEvent::Deleted, boolRemote, *ptrSPITType);
+// if (boolRemote == false) {
+// mSpitTypes.removeEntry(*ptrSPITType);
+// } else {
+// mRemoteSpitTypes.removeEntry(*ptrSPITType);
+// }
+// }
-/**
- * If a client has changed a SPITType, it should send it to the server to transmit the changes.
- * If the SPITType is a fixed one and not created by the client himself, then an eventSPITType can be sent from the server, which cancels the changes.
- * @param p_SPITType the pointer to the changed SPITType
- * @return 0 = is sended, -1 = is not sended
- */
-int SProcessor::sendSPITTypeInternal(SType &p_SPITType) { // @todo
- Message::ReportType sMReportSPITType;
- p_SPITType.fillMessageOP(sMReportSPITType);
- // return sendSPITMessage(sMReportSPITType);
- return 1;
-}
+// /**
+// * If a client has changed a SPITType, it should send it to the server to transmit the changes.
+// * If the SPITType is a fixed one and not created by the client himself, then an eventSPITType can be sent from the server, which cancels the changes.
+// * @param p_SPITType the pointer to the changed SPITType
+// * @return 0 = is sended, -1 = is not sended
+// */
+// int SProcessor::sendSPITTypeInternal(SType &p_SPITType) {
+// Message::ReportType sMReportSPITType;
+// p_SPITType.fillMessageOP(sMReportSPITType);
+// // return sendSPITMessage(sMReportSPITType);
+// return 1;
+// }
-/**
- * Change an existing SPIT_Type.
- * @param p_SPITType the SPITType vont
- * @return true = changed, false = not changed maybe p_SPITType is NULL or the SPITType doesn't exists
- */
-bool SProcessor::changeSPITType(SType *p_SPITType) { // @todo
- if (p_SPITType == nullptr)
- return false;
- SType *ptrSPITType = mSpitTypes.getEntry(p_SPITType->getID());
- if (ptrSPITType == nullptr)
- return false;
+// /**
+// * Change an existing SPIT_Type.
+// * @param p_SPITType the SPITType vont
+// * @return true = changed, false = not changed maybe p_SPITType is NULL or the SPITType doesn't exists
+// */
+// bool SProcessor::changeSPITType(SType *p_SPITType) {
+// if (p_SPITType == nullptr)
+// return false;
+// SType *ptrSPITType = mSpitTypes.getEntry(p_SPITType->getID());
+// if (ptrSPITType == nullptr)
+// return false;
- ptrSPITType->DefaultDelay.set(p_SPITType->DefaultDelay.get());
- ptrSPITType->DefaultDuration.set(p_SPITType->DefaultDuration.get());
- ptrSPITType->Fixed.set(p_SPITType->Fixed.get());
- ptrSPITType->GroupName.set(p_SPITType->GroupName.get());
- ptrSPITType->Name.set(p_SPITType->Name.get());
- ptrSPITType->ProjectIndepended.set(p_SPITType->ProjectIndepended.get());
+// ptrSPITType->DefaultDelay.set(p_SPITType->DefaultDelay.get());
+// ptrSPITType->DefaultDuration.set(p_SPITType->DefaultDuration.get());
+// ptrSPITType->Fixed.set(p_SPITType->Fixed.get());
+// ptrSPITType->GroupName.set(p_SPITType->GroupName.get());
+// ptrSPITType->Name.set(p_SPITType->Name.get());
+// ptrSPITType->ProjectIndepended.set(p_SPITType->ProjectIndepended.get());
- mCallbacks.onSpitType(ObjectEvent::Changed, false, *ptrSPITType);
- sendSPITTypeInternal(*ptrSPITType);
+// mCallbacks.onSpitType(ObjectEvent::Changed, false, *ptrSPITType);
+// sendSPITTypeInternal(*ptrSPITType);
- return true;
-}
+// return true;
+// }
-/**
- * If a client has removed a SPITType where id == p_SPITTypeID, it should send it to the server.
- * The corresponding SPITType if listet in SPITType will be deleted.
- * An eventRemoveSPITType will occur.
- * If a connection to a SPITServer is established, the SPITServer may dicard the deletion an an eventSPITType will occur
- * -> the SPITType will be listet again.
- * @param p_SPITType the id of the SPITType ro remove
- * @return 0 = is sended, -1 = is not sended
- */
-int SProcessor::removeSPITType(string p_SPITTypeID) { // @todo
- if (p_SPITTypeID.length() <= 0)
- return -1;
- SType *ptrSPITType;
- {
- ptrSPITType = mSpitTypes.getEntry(p_SPITTypeID);
- if (ptrSPITType == nullptr)
- return -1;
- Message::RemoveType sMRemoveSPITType;
- ptrSPITType->fillMessageOP(sMRemoveSPITType);
- mCallbacks.onSpitType(ObjectEvent::Deleted, false, *ptrSPITType);
- mSpitTypes.removeEntry(*ptrSPITType);
- // return sendSPITMessage(sMRemoveSPITType);
- return 1;
- }
- return -1;
-}
+// /**
+// * If a client has removed a SPITType where id == p_SPITTypeID, it should send it to the server.
+// * The corresponding SPITType if listet in SPITType will be deleted.
+// * An eventRemoveSPITType will occur.
+// * If a connection to a SPITServer is established, the SPITServer may dicard the deletion an an eventSPITType will occur
+// * -> the SPITType will be listet again.
+// * @param p_SPITType the id of the SPITType ro remove
+// * @return 0 = is sended, -1 = is not sended
+// */
+// int SProcessor::removeSPITType(string p_SPITTypeID) {
+// if (p_SPITTypeID.length() <= 0)
+// return -1;
+// SType *ptrSPITType;
+// {
+// ptrSPITType = mSpitTypes.getEntry(p_SPITTypeID);
+// if (ptrSPITType == nullptr)
+// return -1;
+// Message::RemoveType sMRemoveSPITType;
+// ptrSPITType->fillMessageOP(sMRemoveSPITType);
+// mCallbacks.onSpitType(ObjectEvent::Deleted, false, *ptrSPITType);
+// mSpitTypes.removeEntry(*ptrSPITType);
+// // return sendSPITMessage(sMRemoveSPITType);
+// return 1;
+// }
+// return -1;
+// }
-SType *SProcessor::createTypeFixed(string iD, string p_GroupName, string p_Name, uint64_t p_DefaultDelay, uint64_t p_DefaultDuration) { // @todo
- return createType(iD, p_GroupName, p_Name, p_DefaultDelay, p_DefaultDuration, true, true);
-}
+// SType *SProcessor::createTypeFixed(string iD, string p_GroupName, string p_Name, uint64_t p_DefaultDelay, uint64_t p_DefaultDuration) {
+// return createType(iD, p_GroupName, p_Name, p_DefaultDelay, p_DefaultDuration, true, true);
+// }
-SType *SProcessor::createType(string p_ID, string p_GroupName, string p_Name, uint64_t p_DefaultDelay, uint64_t p_DefaultDuration, bool p_FIxed, bool p_ProjectIndepended) { // @todo
- bool boolNew;
- SType *ptrSPITType = mSpitTypes.getEntry(p_ID);
- if (ptrSPITType == nullptr) {
- auto spitType = make_unique(p_ID, p_GroupName, p_Name, p_FIxed, p_ProjectIndepended, p_DefaultDelay, p_DefaultDuration);
- ptrSPITType = spitType.get();
- mSpitTypes.addEntry(move(spitType));
- ptrSPITType->setCreatedByClient(true);
- boolNew = true;
- } else {
- ptrSPITType->GroupName.set(p_GroupName);
- ptrSPITType->Name.set(p_Name);
- ptrSPITType->Fixed.set(p_FIxed);
- ptrSPITType->ProjectIndepended.set(p_ProjectIndepended);
- ptrSPITType->DefaultDelay.set(p_DefaultDelay);
- ptrSPITType->DefaultDuration.set(p_DefaultDuration);
- boolNew = false;
- }
+// SType *SProcessor::createType(string p_ID, string p_GroupName, string p_Name, uint64_t p_DefaultDelay, uint64_t p_DefaultDuration, bool p_FIxed, bool p_ProjectIndepended) {
+// bool boolNew;
+// SType *ptrSPITType = mSpitTypes.getEntry(p_ID);
+// if (ptrSPITType == nullptr) {
+// auto spitType = make_unique(p_ID, p_GroupName, p_Name, p_FIxed, p_ProjectIndepended, p_DefaultDelay, p_DefaultDuration);
+// ptrSPITType = spitType.get();
+// mSpitTypes.addEntry(move(spitType));
+// ptrSPITType->setCreatedByClient(true);
+// boolNew = true;
+// } else {
+// ptrSPITType->GroupName.set(p_GroupName);
+// ptrSPITType->Name.set(p_Name);
+// ptrSPITType->Fixed.set(p_FIxed);
+// ptrSPITType->ProjectIndepended.set(p_ProjectIndepended);
+// ptrSPITType->DefaultDelay.set(p_DefaultDelay);
+// ptrSPITType->DefaultDuration.set(p_DefaultDuration);
+// boolNew = false;
+// }
- auto eventType = boolNew ? ObjectEvent::Created : ObjectEvent::Changed;
- mCallbacks.onSpitType(eventType, false, *ptrSPITType);
- sendSPITTypeInternal(*ptrSPITType);
- return ptrSPITType;
-}
+// auto eventType = boolNew ? ObjectEvent::Created : ObjectEvent::Changed;
+// mCallbacks.onSpitType(eventType, false, *ptrSPITType);
+// sendSPITTypeInternal(*ptrSPITType);
+// return ptrSPITType;
+// }
-//----- SPIT Objects ------
-void SProcessor::parseReportSPITObject(Message::ReportObject &message) { // @todo
- ESP_LOGD(TAG, "parse ReportObject %s", message.getID().c_str());
- SObject *ptrSPITObject;
- SType *ptrSPITType;
- bool boolNew = false;
- bool boolRemote = false;
- bool boolChanged = false;
- {
- ESP_LOGD(TAG, "parse ReportObject %s / %s", message.getID().c_str(), message.getName().c_str());
- if (message.getServerRemote() == false) {
- boolRemote = false;
- ptrSPITObject = mSpitObjects.getEntry(message.getID());
- ptrSPITType = mSpitTypes.getEntry(message.getSPITTypeID());
+// //----- SPIT Objects ------
+// void SProcessor::parseReportSPITObject(Message::ReportObject &message) {
+// ESP_LOGD(TAG, "parse ReportObject %s", message.getID().c_str());
+// SObject *ptrSPITObject;
+// SType *ptrSPITType;
+// bool boolNew = false;
+// bool boolRemote = false;
+// bool boolChanged = false;
+// {
+// ESP_LOGD(TAG, "parse ReportObject %s / %s", message.getID().c_str(), message.getName().c_str());
+// if (message.getServerRemote() == false) {
+// boolRemote = false;
+// ptrSPITObject = mSpitObjects.getEntry(message.getID());
+// ptrSPITType = mSpitTypes.getEntry(message.getSPITTypeID());
- if (ptrSPITType == nullptr) {
- // No associated SPITType found
- if (ptrSPITObject != nullptr) {
- // SpitObject exists but has no corresponding SPITType -> remove the SPITObject without sending a message
- // Maybe the SPITObject has changed the SPITTypeID to a SPITTypeID of another board
- mSpitObjects.removeEntry(*ptrSPITObject);
- }
- return;
- }
- bool isKnownType = ptrSPITType != nullptr;
- if (ptrSPITObject == nullptr) {
- // The user's app my veto the SPITType
- if (mCallbacks.onCheckSpitObjectVeto(isKnownType) == false) {
- ESP_LOGW(TAG, "ObjectVeto %s / %s", message.getID().c_str(), message.getName().c_str());
- return;
- }
- auto spitObj = make_unique(message.getID());
- ptrSPITObject = spitObj.get();
- mSpitObjects.addEntry(move(spitObj));
- boolNew = true;
- } else {
- // The user's app my veto the SPITType
- if (mCallbacks.onCheckSpitObjectVeto(isKnownType) == false) {
- // SpitObject exists and User APp denied the SPITObject -> remove the SPITObject without sending a message
- mSpitObjects.removeEntry(*ptrSPITObject);
- ESP_LOGW(TAG, "TypeVeto %s / %s", message.getID().c_str(), message.getName().c_str());
- return;
- }
- }
- } else {
- boolRemote = true;
- ptrSPITObject = mRemoteSpitObjects.getEntry(message.getID());
- ptrSPITType = mRemoteSpitTypes.getEntry(message.getSPITTypeID());
- if (ptrSPITType == nullptr) {
- // No associated SPITType found
- return;
- }
- if (ptrSPITObject == nullptr) {
- auto spitObj = make_unique(message.getID());
- ptrSPITObject = spitObj.get();
- mRemoteSpitObjects.addEntry(move(spitObj));
- boolNew = true;
- }
- }
+// if (ptrSPITType == nullptr) {
+// // No associated SPITType found
+// if (ptrSPITObject != nullptr) {
+// // SpitObject exists but has no corresponding SPITType -> remove the SPITObject without sending a message
+// // Maybe the SPITObject has changed the SPITTypeID to a SPITTypeID of another board
+// mSpitObjects.removeEntry(*ptrSPITObject);
+// }
+// return;
+// }
+// bool isKnownType = ptrSPITType != nullptr;
+// if (ptrSPITObject == nullptr) {
+// // The user's app my veto the SPITType
+// if (mCallbacks.onCheckSpitObjectVeto(isKnownType) == false) {
+// ESP_LOGW(TAG, "ObjectVeto %s / %s", message.getID().c_str(), message.getName().c_str());
+// return;
+// }
+// auto spitObj = make_unique(message.getID());
+// ptrSPITObject = spitObj.get();
+// mSpitObjects.addEntry(move(spitObj));
+// boolNew = true;
+// } else {
+// // The user's app my veto the SPITType
+// if (mCallbacks.onCheckSpitObjectVeto(isKnownType) == false) {
+// // SpitObject exists and User APp denied the SPITObject -> remove the SPITObject without sending a message
+// mSpitObjects.removeEntry(*ptrSPITObject);
+// ESP_LOGW(TAG, "TypeVeto %s / %s", message.getID().c_str(), message.getName().c_str());
+// return;
+// }
+// }
+// } else {
+// boolRemote = true;
+// ptrSPITObject = mRemoteSpitObjects.getEntry(message.getID());
+// ptrSPITType = mRemoteSpitTypes.getEntry(message.getSPITTypeID());
+// if (ptrSPITType == nullptr) {
+// // No associated SPITType found
+// return;
+// }
+// if (ptrSPITObject == nullptr) {
+// auto spitObj = make_unique(message.getID());
+// ptrSPITObject = spitObj.get();
+// mRemoteSpitObjects.addEntry(move(spitObj));
+// boolNew = true;
+// }
+// }
- if (!ptrSPITObject->setMessageOP(&message)) {
- ESP_LOGE(TAG, "Change not allowed");
- // setMessageOP error - the SPITObject can't be changed, it may be fixed and crated by this client
- sendSPITObjectInternal(ptrSPITObject);
- return;
- }
+// if (!ptrSPITObject->setMessageOP(&message)) {
+// ESP_LOGE(TAG, "Change not allowed");
+// // setMessageOP error - the SPITObject can't be changed, it may be fixed and crated by this client
+// sendSPITObjectInternal(ptrSPITObject);
+// return;
+// }
- if (boolRemote == false) {
- // set the virtual action assignment
- ptrSPITObject->setActionAssignedType(ptrSPITType->ActionAssigned.get());
- }
+// if (boolRemote == false) {
+// // set the virtual action assignment
+// ptrSPITObject->setActionAssignedType(ptrSPITType->ActionAssigned.get());
+// }
- auto eventType = boolNew ? ObjectEvent::Created : ObjectEvent::Changed;
- mCallbacks.onSpitObject(eventType, boolRemote, *ptrSPITType, *ptrSPITObject);
+// auto eventType = boolNew ? ObjectEvent::Created : ObjectEvent::Changed;
+// mCallbacks.onSpitObject(eventType, boolRemote, *ptrSPITType, *ptrSPITObject);
- if (ptrSPITObject->setConfirmed(true) == true || boolChanged == true) {
- // Confirmation has changed
- sendSPITObjectInternal(ptrSPITObject);
- }
- }
-}
-void SProcessor::parseRemoveSPITObject(Message::RemoveObject &message) { // @todo
- ESP_LOGD(TAG, "parse RemoveObject %s", message.getID().c_str());
- SObject *ptrSPITObject = mRemoteSpitObjects.getEntry(message.getID());
- if (ptrSPITObject != nullptr) {
- SType *ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
- if (ptrSPITType != nullptr) {
- mCallbacks.onSpitObject(ObjectEvent::Deleted, true, *ptrSPITType, *ptrSPITObject);
- }
- mRemoteSpitObjects.removeEntry(*ptrSPITObject);
- } else {
- // call removeSPITObject, this will notify the server that the object is removed
- removeSPITObject(message.getID());
- }
-}
+// if (ptrSPITObject->setConfirmed(true) == true || boolChanged == true) {
+// // Confirmation has changed
+// sendSPITObjectInternal(ptrSPITObject);
+// }
+// }
+// }
+// void SProcessor::parseRemoveSPITObject(Message::RemoveObject &message) {
+// ESP_LOGD(TAG, "parse RemoveObject %s", message.getID().c_str());
+// SObject *ptrSPITObject = mRemoteSpitObjects.getEntry(message.getID());
+// if (ptrSPITObject != nullptr) {
+// SType *ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
+// if (ptrSPITType != nullptr) {
+// mCallbacks.onSpitObject(ObjectEvent::Deleted, true, *ptrSPITType, *ptrSPITObject);
+// }
+// mRemoteSpitObjects.removeEntry(*ptrSPITObject);
+// } else {
+// // call removeSPITObject, this will notify the server that the object is removed
+// removeSPITObject(message.getID());
+// }
+// }
-int SProcessor::sendSPITObjectInternal(SObject *ptrSPITObject) { // @todo
- if (ptrSPITObject == nullptr)
- return -1;
- Message::ReportObject sMReportSPITObject;
- ptrSPITObject->fillMessageOP(sMReportSPITObject);
+// int SProcessor::sendSPITObjectInternal(SObject *ptrSPITObject) {
+// if (ptrSPITObject == nullptr)
+// return -1;
+// Message::ReportObject sMReportSPITObject;
+// ptrSPITObject->fillMessageOP(sMReportSPITObject);
- // return sendSPITMessage(sMReportSPITObject);
- return 1;
-}
-/**
- * When the client changes an existing SPITObject (normally the client should not do this), then he should send the changes to the SPITServer.
- * An eventSPITObject occurs.
- * The SPITServer may discard the changes and a second eventSPITObject occurs to correct the changes.
- * @param obj the pointer to the changed SPITObject.
- * CAUTION: The SPITObject must already exist.
- * @return true = SPITObject is changed, false = not changed, maybe obj is NULL or the SPITObject doesn't exists
- */
-bool SProcessor::changeSPITObject(SObject *obj) { // @todo
- if (obj == nullptr)
- return false;
- SObject *ptrSPITObject;
- SType *ptrSPITType;
- {
- ptrSPITObject = mSpitObjects.getEntry(obj->getID());
- if (ptrSPITObject == nullptr)
- return false;
- ptrSPITType = mSpitTypes.getEntry(obj->getID());
- if (ptrSPITObject == nullptr)
- return false;
+// // return sendSPITMessage(sMReportSPITObject);
+// return 1;
+// }
+// /**
+// * When the client changes an existing SPITObject (normally the client should not do this), then he should send the changes to the SPITServer.
+// * An eventSPITObject occurs.
+// * The SPITServer may discard the changes and a second eventSPITObject occurs to correct the changes.
+// * @param obj the pointer to the changed SPITObject.
+// * CAUTION: The SPITObject must already exist.
+// * @return true = SPITObject is changed, false = not changed, maybe obj is NULL or the SPITObject doesn't exists
+// */
+// bool SProcessor::changeSPITObject(SObject *obj) {
+// if (obj == nullptr)
+// return false;
+// SObject *ptrSPITObject;
+// SType *ptrSPITType;
+// {
+// ptrSPITObject = mSpitObjects.getEntry(obj->getID());
+// if (ptrSPITObject == nullptr)
+// return false;
+// ptrSPITType = mSpitTypes.getEntry(obj->getID());
+// if (ptrSPITObject == nullptr)
+// return false;
- ptrSPITObject->setActionAssigned(obj->getActionAssigned());
- ;
- ptrSPITObject->Delay.set(obj->Delay.get());
- ptrSPITObject->Duration.set(obj->Delay.get());
- ptrSPITObject->Fixed.set(obj->Fixed.get());
- ptrSPITObject->FrameFadeInLength.set(obj->FrameFadeInLength.get());
- ptrSPITObject->FrameFadeOutLength.set(obj->FrameFadeOutLength.get());
- ptrSPITObject->FrameLength.set(obj->FrameLength.get());
- ptrSPITObject->FrameStart.set(obj->FrameStart.get());
- ptrSPITObject->Name.set(obj->Name.get());
- ptrSPITObject->Remark.set(obj->Remark.get());
- ptrSPITObject->SPITTypeID.set(obj->SPITTypeID.get());
- ptrSPITObject->ServerParams.set(obj->ServerParams.get());
- ptrSPITObject->Track.set(obj->Track.get());
- ptrSPITObject->ValueFactor.set(obj->ValueFactor.get());
- ptrSPITObject->ValueUse.set(obj->ValueUse.get());
+// ptrSPITObject->setActionAssigned(obj->getActionAssigned());
+// ;
+// ptrSPITObject->Delay.set(obj->Delay.get());
+// ptrSPITObject->Duration.set(obj->Delay.get());
+// ptrSPITObject->Fixed.set(obj->Fixed.get());
+// ptrSPITObject->FrameFadeInLength.set(obj->FrameFadeInLength.get());
+// ptrSPITObject->FrameFadeOutLength.set(obj->FrameFadeOutLength.get());
+// ptrSPITObject->FrameLength.set(obj->FrameLength.get());
+// ptrSPITObject->FrameStart.set(obj->FrameStart.get());
+// ptrSPITObject->Name.set(obj->Name.get());
+// ptrSPITObject->Remark.set(obj->Remark.get());
+// ptrSPITObject->SPITTypeID.set(obj->SPITTypeID.get());
+// ptrSPITObject->ServerParams.set(obj->ServerParams.get());
+// ptrSPITObject->Track.set(obj->Track.get());
+// ptrSPITObject->ValueFactor.set(obj->ValueFactor.get());
+// ptrSPITObject->ValueUse.set(obj->ValueUse.get());
- mCallbacks.onSpitObject(ObjectEvent::Changed, false, *ptrSPITType, *ptrSPITObject);
- sendSPITObjectInternal(ptrSPITObject);
- }
- return true;
-}
+// mCallbacks.onSpitObject(ObjectEvent::Changed, false, *ptrSPITType, *ptrSPITObject);
+// sendSPITObjectInternal(ptrSPITObject);
+// }
+// return true;
+// }
-/**
- * When the client wants to remove a SPITObject with id == p_SPITObjectID (normally the client should not do this), then he should send it to the SPITServer.
- * The corresponding SPITObject if listet in SPITObject will be deleted.
- * An eventRemoveSPITType will occur.
- * If an connection to a SPITServer is established, the SPITServer may discard the deletion and an eventSPITObject occurs
- * -> the SPITObject is listet again.
- * @param objId the id of the SPITObject to remove.
- * @return 0 = sended to the SPITServer, -1 = not sended to the SPITServer or nos SPITObject with id == objId exists.
- */
-int SProcessor::removeSPITObject(string objId) { // @todo
- if (objId.length() <= 0)
- return -1;
- SType *ptrSPITType;
- SObject *ptrSPITObject;
- {
- Message::RemoveObject sMRemoveSPITObject;
+// /**
+// * When the client wants to remove a SPITObject with id == p_SPITObjectID (normally the client should not do this), then he should send it to the SPITServer.
+// * The corresponding SPITObject if listet in SPITObject will be deleted.
+// * An eventRemoveSPITType will occur.
+// * If an connection to a SPITServer is established, the SPITServer may discard the deletion and an eventSPITObject occurs
+// * -> the SPITObject is listet again.
+// * @param objId the id of the SPITObject to remove.
+// * @return 0 = sended to the SPITServer, -1 = not sended to the SPITServer or nos SPITObject with id == objId exists.
+// */
+// int SProcessor::removeSPITObject(string objId) {
+// if (objId.length() <= 0)
+// return -1;
+// SType *ptrSPITType;
+// SObject *ptrSPITObject;
+// {
+// Message::RemoveObject sMRemoveSPITObject;
- ptrSPITObject = mSpitObjects.getEntry(objId);
- if (ptrSPITObject == nullptr)
- return -1;
- ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
- if (ptrSPITType == nullptr)
- return -1;
- ptrSPITObject->fillMessageOP(sMRemoveSPITObject);
- mCallbacks.onSpitObject(ObjectEvent::Deleted, false, *ptrSPITType, *ptrSPITObject);
- mSpitObjects.removeEntry(*ptrSPITObject);
- // return sendSPITMessage(sMRemoveSPITObject);
- return 1;
- }
- return -1;
-}
+// ptrSPITObject = mSpitObjects.getEntry(objId);
+// if (ptrSPITObject == nullptr)
+// return -1;
+// ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
+// if (ptrSPITType == nullptr)
+// return -1;
+// ptrSPITObject->fillMessageOP(sMRemoveSPITObject);
+// mCallbacks.onSpitObject(ObjectEvent::Deleted, false, *ptrSPITType, *ptrSPITObject);
+// mSpitObjects.removeEntry(*ptrSPITObject);
+// // return sendSPITMessage(sMRemoveSPITObject);
+// return 1;
+// }
+// return -1;
+// }
-//----- Play SPIT Objects ------
+// //----- Play SPIT Objects ------
-void SProcessor::parsePlaySPITStart(Message::PlayStart &message) { // @todo
- ESP_LOGD(TAG, "parse PlayStart ID: %s Name: %s Running: %d", message.getPlayerID().c_str(), message.getPlayerName().c_str(), (int)message.getPlayerIsRunning());
- SPlayer &spitPlayer = SPlayer::getSPITPlayer(message.getPlayerID());
- spitPlayer.setIsRunning(message.getPlayerIsRunning());
- spitPlayer.setName(message.getPlayerName());
- spitPlayer.setType(message.getPlayerType());
- spitPlayer.setTime(message.getTime());
- spitPlayer.startPlaySequence();
+// void SProcessor::parsePlaySPITStart(Message::PlayStart &message) {
+// ESP_LOGD(TAG, "parse PlayStart ID: %s Name: %s Running: %d", message.getPlayerID().c_str(), message.getPlayerName().c_str(), (int)message.getPlayerIsRunning());
+// SPlayer &spitPlayer = SPlayer::getSPITPlayer(message.getPlayerID());
+// spitPlayer.setIsRunning(message.getPlayerIsRunning());
+// spitPlayer.setName(message.getPlayerName());
+// spitPlayer.setType(message.getPlayerType());
+// spitPlayer.setTime(message.getTime());
+// spitPlayer.startPlaySequence();
- mCallbacks.onPlay(spitPlayer.getID(), spitPlayer.getName(), spitPlayer.getType(), spitPlayer.getIsRunning(), spitPlayer.getTime());
-}
-void SProcessor::parsePlaySPITObject(Message::PlayObject &message) { // @todo
+// mCallbacks.onPlay(spitPlayer.getID(), spitPlayer.getName(), spitPlayer.getType(), spitPlayer.getIsRunning(), spitPlayer.getTime());
+// }
+// void SProcessor::parsePlaySPITObject(Message::PlayObject &message) {
- SPlayer &ptrSPITPlayer = SPlayer::getSPITPlayer(message.getPlayerID());
- SObject *ptrSPITObject = mSpitObjects.getEntry(message.getSPITObjectID());
+// SPlayer &ptrSPITPlayer = SPlayer::getSPITPlayer(message.getPlayerID());
+// SObject *ptrSPITObject = mSpitObjects.getEntry(message.getSPITObjectID());
- if (ptrSPITObject == nullptr) {
- return;
- }
- SPlayer::PlayType *ptrPlaySPITType = ptrSPITPlayer.addTypePlaying(ptrSPITObject->SPITTypeID.get());
- if (ptrPlaySPITType == nullptr) {
- return;
- }
- ptrPlaySPITType->setPlayerIsRunning(ptrSPITPlayer.getIsRunning());
- ptrPlaySPITType->addValue(((double)message.getValue() / 1000000), ((double)ptrSPITObject->ValueFactor.get() / 1000000));
-}
+// if (ptrSPITObject == nullptr) {
+// return;
+// }
+// SPlayer::PlayType *ptrPlaySPITType = ptrSPITPlayer.addTypePlaying(ptrSPITObject->SPITTypeID.get());
+// if (ptrPlaySPITType == nullptr) {
+// return;
+// }
+// ptrPlaySPITType->setPlayerIsRunning(ptrSPITPlayer.getIsRunning());
+// ptrPlaySPITType->addValue(((double)message.getValue() / 1000000), ((double)ptrSPITObject->ValueFactor.get() / 1000000));
+// }
-void SProcessor::parsePlaySPITEnd(Message::PlayEnd &message) { // @todo
- SPlayer &ptrSPITPlayer = SPlayer::getSPITPlayer(message.getPlayerID());
+// void SProcessor::parsePlaySPITEnd(Message::PlayEnd &message) {
+// SPlayer &ptrSPITPlayer = SPlayer::getSPITPlayer(message.getPlayerID());
- auto &ptrPlaySPITTypes = ptrSPITPlayer.getPlaySPITTypes();
- for (auto i = ptrPlaySPITTypes.begin(); i != ptrPlaySPITTypes.end(); i++) {
- SPlayer::PlayType *ptrPlaySPITType = i->second.get();
- bool boolStarted = ptrPlaySPITType->getIsNew();
- bool boolStopped = (ptrPlaySPITType->getIsPlayed() == false);
- SType *ptrSPITType = mSpitTypes.getEntry(ptrPlaySPITType->getSPITTypeID());
- if (ptrSPITType == nullptr) {
- // set isplayed to false, the ptrPlayObject will be removed by ptrSPITPlayer.endPlaySequence()
- ptrPlaySPITType->setIsPlayed(false);
- continue;
- }
- mCallbacks.onPlaySpitType(ptrPlaySPITType->getPlayerID(), ptrPlaySPITType->getSPITTypeID(), ptrPlaySPITType->getPlayerIsRunning(), boolStarted, boolStopped, ptrPlaySPITType->getValue());
- }
- ptrSPITPlayer.endPlaySequence();
-}
+// auto &ptrPlaySPITTypes = ptrSPITPlayer.getPlaySPITTypes();
+// for (auto i = ptrPlaySPITTypes.begin(); i != ptrPlaySPITTypes.end(); i++) {
+// SPlayer::PlayType *ptrPlaySPITType = i->second.get();
+// bool boolStarted = ptrPlaySPITType->getIsNew();
+// bool boolStopped = (ptrPlaySPITType->getIsPlayed() == false);
+// SType *ptrSPITType = mSpitTypes.getEntry(ptrPlaySPITType->getSPITTypeID());
+// if (ptrSPITType == nullptr) {
+// // set isplayed to false, the ptrPlayObject will be removed by ptrSPITPlayer.endPlaySequence()
+// ptrPlaySPITType->setIsPlayed(false);
+// continue;
+// }
+// mCallbacks.onPlaySpitType(ptrPlaySPITType->getPlayerID(), ptrPlaySPITType->getSPITTypeID(), ptrPlaySPITType->getPlayerIsRunning(), boolStarted, boolStopped, ptrPlaySPITType->getValue());
+// }
+// ptrSPITPlayer.endPlaySequence();
+// }
-void SProcessor::parseReportPlayStatus(Message::ReportPlayStatus &message) { // @todo
- SType *ptrSPITType = NULL;
+// void SProcessor::parseReportPlayStatus(Message::ReportPlayStatus &message) {
+// SType *ptrSPITType = NULL;
- SObject *ptrSPITObject = mRemoteSpitObjects.getEntry(message.getID());
- if (ptrSPITObject == nullptr) {
- ptrSPITObject = mSpitObjects.getEntry(message.getID());
- if (ptrSPITObject == nullptr) {
- return;
- }
- }
- if (ptrSPITObject->ServerRemote.get() == false) {
- ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
- } else {
- ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
- }
+// SObject *ptrSPITObject = mRemoteSpitObjects.getEntry(message.getID());
+// if (ptrSPITObject == nullptr) {
+// ptrSPITObject = mSpitObjects.getEntry(message.getID());
+// if (ptrSPITObject == nullptr) {
+// return;
+// }
+// }
+// if (ptrSPITObject->ServerRemote.get() == false) {
+// ptrSPITType = mSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
+// } else {
+// ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->SPITTypeID.get());
+// }
- if (ptrSPITType == nullptr) {
- return;
- }
- mCallbacks.onPlayRemoteObjectStatus(*ptrSPITType, *ptrSPITObject, message.getFrameInsideObject(), message.getValue());
-}
+// if (ptrSPITType == nullptr) {
+// return;
+// }
+// mCallbacks.onPlayRemoteObjectStatus(*ptrSPITType, *ptrSPITObject, message.getFrameInsideObject(), message.getValue());
+// }
-//--------- Remote ----------
+// //--------- Remote ----------
-/**
- * Send a remote control command to the SPITServer.
- * There may be different command types:
- * a) Some don't use value e.g. go to next scene, olay a jingle
- * b) Some use values e.g. the main sound fader
- * @param p_SPITObjectID the id of the remote SPITObject (this represents the remote control command)
- * @param valuePpm the value in ppm
- * in case a) the value is ignored
- * in case b) the value is used
- * @param valueFlag indicates how the server should use valuePpm:
- * VALUEFLAG_DIRECT (0x00) The server overwrites its existing value with p_Value
- * VALUEFLAG_INCREASE (0x01) The server increases his existing value by valuePpm
- * VALUEFLAG_DECREASE (0x01) The server decreases his existing value by valuePpm
- */
-void SProcessor::sendRemoteObject(string p_SPITObjectID, int valuePpm, char valueFlag) { // @todo
- SObject *ptrRemoteSPITObject = mRemoteSpitObjects.getEntry(p_SPITObjectID);
- if (ptrRemoteSPITObject == nullptr)
- return;
+// /**
+// * Send a remote control command to the SPITServer.
+// * There may be different command types:
+// * a) Some don't use value e.g. go to next scene, olay a jingle
+// * b) Some use values e.g. the main sound fader
+// * @param p_SPITObjectID the id of the remote SPITObject (this represents the remote control command)
+// * @param valuePpm the value in ppm
+// * in case a) the value is ignored
+// * in case b) the value is used
+// * @param valueFlag indicates how the server should use valuePpm:
+// * VALUEFLAG_DIRECT (0x00) The server overwrites its existing value with p_Value
+// * VALUEFLAG_INCREASE (0x01) The server increases his existing value by valuePpm
+// * VALUEFLAG_DECREASE (0x01) The server decreases his existing value by valuePpm
+// */
+// void SProcessor::sendRemoteObject(string p_SPITObjectID, int valuePpm, char valueFlag) {
+// SObject *ptrRemoteSPITObject = mRemoteSpitObjects.getEntry(p_SPITObjectID);
+// if (ptrRemoteSPITObject == nullptr)
+// return;
- Message::PlayStart playSPITStart(mGuid, mProjName, PLAYERTYPE_DISCRETE);
- playSPITStart.setPlayerIsRunning(false);
- playSPITStart.setTime(0);
- // sendSPITMessage(playSPITStart);
+// Message::PlayStart playSPITStart(mGuid, mProjName, PLAYERTYPE_DISCRETE);
+// playSPITStart.setPlayerIsRunning(false);
+// playSPITStart.setTime(0);
+// // sendSPITMessage(playSPITStart);
- Message::PlayObject playSPITObject;
- playSPITObject.setID(ptrRemoteSPITObject->getID());
- playSPITObject.setPlayPrePosition(false);
- playSPITObject.setPlayerID(mGuid);
- playSPITObject.setValue(valuePpm);
- playSPITObject.setValueFlag(valueFlag);
- // sendSPITMessage(playSPITObject);
+// Message::PlayObject playSPITObject;
+// playSPITObject.setID(ptrRemoteSPITObject->getID());
+// playSPITObject.setPlayPrePosition(false);
+// playSPITObject.setPlayerID(mGuid);
+// playSPITObject.setValue(valuePpm);
+// playSPITObject.setValueFlag(valueFlag);
+// // sendSPITMessage(playSPITObject);
- Message::PlayEnd playSPITEnd(mGuid);
- // sendSPITMessage(playSPITEnd);
-}
+// Message::PlayEnd playSPITEnd(mGuid);
+// // sendSPITMessage(playSPITEnd);
+// }
-
-
-}
\ No newline at end of file
+} // namespace spit
\ No newline at end of file