cache topics we're already subscribed to

This commit is contained in:
Michael Zanetti 2017-11-28 21:30:40 +01:00
parent 5b4b67454d
commit 6353b5bc96
2 changed files with 11 additions and 1 deletions

View File

@ -77,6 +77,7 @@ void AWSConnector::connect2AWS(const QString &endpoint, const QString &clientId,
void AWSConnector::doConnect()
{
m_setupInProgress = true;
m_subscriptionCache.clear();
m_networkConnection = std::shared_ptr<MbedTLSConnection>(new MbedTLSConnection(
m_currentEndpoint.toStdString(),
8883,
@ -193,7 +194,7 @@ void AWSConnector::disconnectAWS()
{
m_shouldReconnect = false;
if (isConnected()) {
m_client->Disconnect(std::chrono::seconds(2));
m_client->Disconnect(std::chrono::milliseconds(2000));
m_client.reset();
m_networkConnection.reset();
qCDebug(dcAWS()) << "Disconnected from AWS.";
@ -297,6 +298,10 @@ quint16 AWSConnector::subscribe(const QStringList &topics)
{
util::Vector<std::shared_ptr<mqtt::Subscription>> subscription_list;
foreach (const QString &topic, topics) {
if (m_subscriptionCache.contains(topic)) {
qCDebug(dcAWS()) << "Already subscribed to topic:" << topic << ". Not resubscribing";
continue;
}
qCDebug(dcAWSTraffic()) << "Topic to subscribe is" << topic;
if (!Subscription::IsValidTopicName(topic.toStdString())) {
qCWarning(dcAWS()) << "Trying to subscribe to invalid topic:" << topic;
@ -304,6 +309,10 @@ quint16 AWSConnector::subscribe(const QStringList &topics)
}
auto subscription = mqtt::Subscription::Create(Utf8String::Create(topic.toStdString()), mqtt::QoS::QOS1, &onSubscriptionReceivedCallback, m_subscriptionContextData);
subscription_list.push_back(subscription);
m_subscriptionCache.append(topic);
}
if (subscription_list.size() == 0) {
return 0;
}
uint16_t packetId;

View File

@ -114,6 +114,7 @@ private:
bool m_setupInProgress = false;
int m_reconnectCounter = 0;
QDateTime m_lastConnectionDrop;
QStringList m_subscriptionCache;
std::shared_ptr<awsiotsdk::mqtt::SubscriptionHandlerContextData> m_subscriptionContextData;
std::shared_ptr<awsiotsdk::DisconnectCallbackContextData> m_disconnectContextData;