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