@@ -1012,6 +1012,17 @@ bool BytebeamArduino::handleActions(char* actionReceivedStr) {
10121012 BytebeamLogger::Debug(__FILE__, __func__, "payloadStr : %s", payloadStr);
10131013#endif
10141014
1015+ int32_t actionIdVal = (int32_t )(atoi (idStr));
1016+ int32_t lastKnownActionIdVal = (int32_t )(atoi (this ->lastKnownActionId ));
1017+
1018+ BytebeamLogger::Debug (__FILE__, __func__, " actionIdVal : %ld, lastKnownActionIdVal : %ld\n " ,actionIdVal, lastKnownActionIdVal);
1019+
1020+ // just ignore the previous actions if triggered again
1021+ if (actionIdVal <= lastKnownActionIdVal) {
1022+ BytebeamLogger::Error (__FILE__, __func__, " Ignoring %s Action" , name);
1023+ return true ;
1024+ }
1025+
10151026 int actionIterator = 0 ;
10161027 while (this ->actionFuncs [actionIterator].name ) {
10171028 if (!strcmp (this ->actionFuncs [actionIterator].name , name)) {
@@ -1022,9 +1033,15 @@ bool BytebeamArduino::handleActions(char* actionReceivedStr) {
10221033 }
10231034
10241035 if (this ->actionFuncs [actionIterator].name == NULL ) {
1025- BytebeamLogger::Error (__FILE__, __func__, " invalid action : %s" , name);
1036+ BytebeamLogger::Error (__FILE__, __func__, " Invalid Action : %s" , name);
1037+
1038+ // publish action failed response indicating unregistered action
1039+ publishActionFailed (idStr, " Unregistered Action" );
10261040 }
10271041
1042+ // update the last known action id
1043+ strcpy (this ->lastKnownActionId , idStr);
1044+
10281045 // release the allocated memory :)
10291046 free (idStr);
10301047 free (payloadStr);
0 commit comments