MqttClient::unsubscribe implemented
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
"type": "git",
|
||||
"url": "https://github.com/hsaturn/TinyMqtt.git"
|
||||
},
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.1",
|
||||
"exclude": "",
|
||||
"examples": "examples/*/*.ino",
|
||||
"frameworks": "arduino",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name=TinyMqtt
|
||||
version=0.6.0
|
||||
version=0.7.1
|
||||
author=Francois BIOT, HSaturn, <hsaturn@gmail.com>
|
||||
maintainer=Francois BIOT, HSaturn, <hsaturn@gmail.com>
|
||||
sentence=A tiny broker and client library for MQTT messaging.
|
||||
|
||||
@@ -269,10 +269,30 @@ MqttError MqttClient::subscribe(Topic topic, uint8_t qos)
|
||||
|
||||
subscriptions.insert(topic);
|
||||
|
||||
if (parent==nullptr) // remote broker ?
|
||||
if (parent==nullptr) // remote broker
|
||||
{
|
||||
debug("remote subscribe");
|
||||
MqttMessage msg(MqttMessage::Type::Subscribe, 2);
|
||||
return sendTopic(topic, MqttMessage::Type::Subscribe, qos);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
MqttError MqttClient::unsubscribe(Topic topic)
|
||||
{
|
||||
auto it=subscriptions.find(topic);
|
||||
if (it != subscriptions.end())
|
||||
{
|
||||
subscriptions.erase(it);
|
||||
if (parent==nullptr) // remote broker
|
||||
{
|
||||
return sendTopic(topic, MqttMessage::Type::UnSubscribe, 0);
|
||||
}
|
||||
}
|
||||
return MqttOk;
|
||||
}
|
||||
|
||||
MqttError MqttClient::sendTopic(const Topic& topic, MqttMessage::Type type, uint8_t qos)
|
||||
{
|
||||
MqttMessage msg(type, 2);
|
||||
|
||||
// TODO manage packet identifier
|
||||
msg.add(0);
|
||||
@@ -280,11 +300,9 @@ MqttError MqttClient::subscribe(Topic topic, uint8_t qos)
|
||||
|
||||
msg.add(topic);
|
||||
msg.add(qos);
|
||||
ret = msg.sendTo(this);
|
||||
|
||||
// TODO we should wait (state machine) for SUBACK
|
||||
}
|
||||
return ret;
|
||||
// TODO instead we should wait (state machine) for SUBACK / UNSUBACK ?
|
||||
return msg.sendTo(this);
|
||||
}
|
||||
|
||||
long MqttClient::counter=0;
|
||||
|
||||
@@ -149,7 +149,7 @@ class MqttClient
|
||||
MqttError publish(const Topic& t) { return publish(t, nullptr, 0);};
|
||||
|
||||
MqttError subscribe(Topic topic, uint8_t qos=0);
|
||||
MqttError unsubscribe(Topic& topic);
|
||||
MqttError unsubscribe(Topic topic);
|
||||
|
||||
// connected to local broker
|
||||
// TODO seems to be useless
|
||||
@@ -178,6 +178,7 @@ class MqttClient
|
||||
static long counter; // Number of messages sent
|
||||
|
||||
private:
|
||||
MqttError sendTopic(const Topic& topic, MqttMessage::Type type, uint8_t qos);
|
||||
void resubscribe();
|
||||
|
||||
friend class MqttBroker;
|
||||
|
||||
@@ -96,8 +96,9 @@ test(local_unsubscribe)
|
||||
MqttClient publisher(&broker);
|
||||
publisher.publish("a/b");
|
||||
|
||||
// subscriber.unsubscribe("a/b"); TODO not yet implemented
|
||||
subscriber.unsubscribe("a/b");
|
||||
|
||||
publisher.publish("a/b");
|
||||
publisher.publish("a/b");
|
||||
|
||||
assertTrue(published[""]["a/b"] == 1); // Only one publish has been received
|
||||
@@ -120,7 +121,6 @@ test(local_nocallback_when_destroyed)
|
||||
assertEqual(published.size(), (size_t)0); // Only one publish has been received
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// setup() and loop()
|
||||
void setup() {
|
||||
|
||||
Reference in New Issue
Block a user