diff --git a/src/DidacticNet.cpp b/src/DidacticNet.cpp index 361ab839dbadd3c73b0d91c79884ec550914a451..29286349a39a35f7116e6d13f45e8518b2bab4fa 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 3480fe81241491c7548a2aa2e4f9c43c95488e80..a81754daa5992064535193cad1f1acf047723d42 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: