From a937a97659a7eeeb26b390ec6b49fd7fe81cb466 Mon Sep 17 00:00:00 2001 From: Nicholas O'Leary Date: Tue, 20 Jul 2010 20:05:03 +0100 Subject: [PATCH] Fixed connection lost handling --- CHANGES.txt | 3 +++ PubSubClient.cpp | 32 +++++++++++++++++--------------- PubSubClient.h | 1 + 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 9fdba7b..94be25f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +1.4 + * Fixed connection lost handling + 1.3 * Fixed packet reading bug in PubSubClient.readPacket diff --git a/PubSubClient.cpp b/PubSubClient.cpp index 60a80c3..c133b28 100644 --- a/PubSubClient.cpp +++ b/PubSubClient.cpp @@ -21,7 +21,7 @@ int PubSubClient::connect(char *id) { } int PubSubClient::connect(char *id, char* willTopic, uint8_t willQos, uint8_t willRetain, char* willMessage) { - if (!_client.connected()) { + if (!connected()) { if (_client.connect()) { nextMsgId = 1; uint8_t d[9] = {0x00,0x06,0x4d,0x51,0x49,0x73,0x64,0x70,0x03}; @@ -50,23 +50,25 @@ int PubSubClient::connect(char *id, char* willTopic, uint8_t willQos, uint8_t wi lastActivity = millis(); return 1; } - - _client.stop(); } + _client.stop(); } return 0; } +uint8_t PubSubClient::readByte() { + while(!_client.available()) {} + return _client.read(); +} + uint8_t PubSubClient::readPacket() { uint8_t len = 0; - while (!_client.available()) {} - buffer[len++] = _client.read(); + buffer[len++] = readByte(); uint8_t multiplier = 1; uint8_t length = 0; uint8_t digit = 0; do { - while (!_client.available()) {} - digit = _client.read(); + digit = readByte(); buffer[len++] = digit; length += (digit & 127) * multiplier; multiplier *= 128; @@ -75,11 +77,9 @@ uint8_t PubSubClient::readPacket() { for (int i = 0;i KEEPALIVE) { _client.write(192); @@ -129,7 +129,7 @@ int PubSubClient::publish(char* topic, char* payload) { int PubSubClient::publish(char* topic, uint8_t* payload, uint8_t plength) { - if (_client.connected()) { + if (connected()) { uint8_t length = writeString(topic,buffer,0); int i; for (i=0;i> 8; @@ -187,7 +187,9 @@ uint8_t PubSubClient::writeString(char* string, uint8_t* buf, uint8_t pos) { int PubSubClient::connected() { - return (int)_client.connected(); + int rc = (int)_client.connected(); + if (!rc) _client.stop(); + return rc; } diff --git a/PubSubClient.h b/PubSubClient.h index 1deac96..10aa521 100644 --- a/PubSubClient.h +++ b/PubSubClient.h @@ -21,6 +21,7 @@ private: long lastActivity; void (*callback)(char*,uint8_t*,int); uint8_t readPacket(); + uint8_t readByte(); int write(uint8_t header, uint8_t* buf, uint8_t length); uint8_t writeString(char* string, uint8_t* buf, uint8_t pos); public: