From 84a4fe6d16e269c3d5038c9ee138bed64114694a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anian=20B=C3=BChler?=
 <anian.buehler@reutlingen-university.de>
Date: Fri, 22 Jul 2022 18:13:44 +0200
Subject: [PATCH] handleNetwork return true/false added

---
 src/DidacticNet.cpp | 36 ++++++++++++++++++++++++++----------
 src/DidacticNet.h   |  7 ++++---
 2 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/DidacticNet.cpp b/src/DidacticNet.cpp
index 361ab83..2928634 100644
--- a/src/DidacticNet.cpp
+++ b/src/DidacticNet.cpp
@@ -53,6 +53,12 @@ bool DidacticPSNet::handleNetwork(){
       while(micros() < delayStartTime + CSMA_CHECK_DELAY_US);
       //delayMicroseconds(CSMA_CHECK_DELAY_US); //removed: blocking SoftSerial-interrupts
       if(!checkData()){
+          sendData();
+          _dataToSend = false;
+          //_waitingTime = millis()+ random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS);
+          _waitingTimeSend = millis() + _intervalTime;//random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS);
+          return true;
+        /*
         if(!sendData()){
           return false;
         }
@@ -60,18 +66,19 @@ bool DidacticPSNet::handleNetwork(){
           _dataToSend = false;
           //_waitingTime = millis()+ random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS);
           _waitingTimeSend = millis() + _intervalTime;//random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS);
-        }
+          return true;
+        }*/
       }
     }
   //}
-	return true;
+	return false;
 }
 
 bool DidacticPSNet::isDataToSend(){
   return _dataToSend;
 }
 
-bool DidacticPSNet::sendData(){
+void DidacticPSNet::sendData(){
 	int counter = 0;
   bool messageSent = false;
 	while(!messageSent){
@@ -87,7 +94,7 @@ bool DidacticPSNet::sendData(){
 		_port->write(_sendBufferMessage[counter]);
 		counter++;
 	}
-	return true;
+	return;
 }
 
 int DidacticPSNet::extractData(int startCounter, int maxLength, char* buffer, char limiter){
@@ -240,7 +247,7 @@ int DidacticPSNetClient::subscribe(char* topic, int topicLength){
 	_sendBufferMessage[1] = MSG_SUBSCRIBE;
 	_sendBufferMessage[2+topicLength] = MSG_DELIMITER;
 
-  int topicNumber = getTopicNr(topic);
+  int topicNumber = getTopicOrWildcardNr(topic);
 
   if(topicNumber < 0){
     topicNumber = getFreeTopicNr();
@@ -296,7 +303,7 @@ bool DidacticPSNetClient::handleData(){
   int payloadLength = 0;
   topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_SEPARATOR);
   if(topicLength > 0){
-    currentTopicNr = getTopicNr(_bufferTopic);
+    currentTopicNr = getTopicOrWildcardNr(_bufferTopic);
     payloadLength  = extractData(topicLength+3, MAX_LEN_PAYLOAD, _bufferPayload, MSG_DELIMITER);
     if( currentTopicNr >= 0){
       savePayload( _bufferPayload, currentTopicNr);
@@ -312,7 +319,7 @@ bool DidacticPSNetClient::handleData(){
   return true;
 }
 
-int DidacticPSNetClient::getTopicNr(char* topic){
+int DidacticPSNetClient::getTopicOrWildcardNr(char* topic){
 	for (int i = 0; i < MAX_NR_TOPICS_CLIENT; i++) {
     if (strcmp(_topic[i], topic) == 0 || _topic[i][0] == MSG_TOPIC_MULTI) { //TODO: check ... or equal MSG_TOPIC_MULTI
       return i;
@@ -321,6 +328,15 @@ int DidacticPSNetClient::getTopicNr(char* topic){
  return -1;
 }
 
+int DidacticPSNetClient::getTopicNr(char* topic){
+	for (int i = 0; i < MAX_NR_TOPICS_CLIENT; i++) {
+    if (strcmp(_topic[i], topic) == 0 ) {
+      return i;
+		}
+	}
+ return -1;
+}
+
 int DidacticPSNetClient::getFreeTopicNr() {
   for (int i = 0; i < MAX_NR_TOPICS_CLIENT; i++) {
     if (strcmp(_topic[i], "") == 0) {
@@ -376,7 +392,7 @@ bool DidacticPSNetBroker::handleData(){
   if(_readBufferMessage[1] == MSG_PUBLISH){
     topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_SEPARATOR);
     if(topicLength > 0){
-      currentTopicNr = getTopicNr(_bufferTopic);
+      currentTopicNr = getTopicOrWildcardNr(_bufferTopic);
       dataLength  = extractData(topicLength+3, MAX_LEN_PAYLOAD, _bufferPayload, MSG_DELIMITER);
       if( currentTopicNr >= 0){
         writeDataToTopic(currentTopicNr, _bufferTopic, _bufferPayload);
@@ -387,7 +403,7 @@ bool DidacticPSNetBroker::handleData(){
   else if(_readBufferMessage[1] == MSG_SUBSCRIBE){
     topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_DELIMITER);
     if(topicLength > 0){
-      currentTopicNr = getTopicNr(_bufferTopic);
+      currentTopicNr = getTopicOrWildcardNr(_bufferTopic);
       if(currentTopicNr >= 0){
         update(_topic[currentTopicNr], strlen(_topic[currentTopicNr]), _data[currentTopicNr], strlen(_data[currentTopicNr]));
       }
@@ -423,7 +439,7 @@ bool DidacticPSNetBroker::update(char* topic, int topicLength, char* data , int
 	return true;
 }
 
-int DidacticPSNetBroker::getTopicNr(char* topic){
+int DidacticPSNetBroker::getTopicOrWildcardNr(char* topic){
 	for (int i = 0; i < MAX_NR_TOPICS_BROKER; i++) {
   if (strcmp(_topic[i], topic) == 0) {
       return i;
diff --git a/src/DidacticNet.h b/src/DidacticNet.h
index 3480fe8..a81754d 100644
--- a/src/DidacticNet.h
+++ b/src/DidacticNet.h
@@ -129,10 +129,10 @@ class DidacticPSNet
 
 		int checkData();
 		bool recieveData();
-		bool sendData();
+		void sendData();
 		int extractData(int, int, char*, char);
 		void writeDataToTopic(char*, char*);
-		virtual int getTopicNr(char*)=0;
+		virtual int getTopicOrWildcardNr(char*)=0;
 		virtual int getFreeTopicNr()=0;
 		virtual bool getMessageFilter(char)=0;
 		virtual bool savePayload(char*, int)=0;
@@ -164,6 +164,7 @@ class DidacticPSNetClient : public  DidacticPSNet
 	bool savePayload(char*, int);
 	bool getMessageFilter(char);
 	bool handleData();
+	int getTopicOrWildcardNr(char*);
 	int getTopicNr(char*);
 	int getFreeTopicNr();
 
@@ -201,7 +202,7 @@ class DidacticPSNetBroker: public  DidacticPSNet
 	bool getMessageFilter(char);
 	void writeDataToTopic(int, char*, char*);
 	bool handleData();
-	int getTopicNr(char*);
+	int getTopicOrWildcardNr(char*);
 	int getFreeTopicNr();
 
 	public:
-- 
GitLab