From 6353b5bc96737c603af1ef49d472115584ee155e Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 28 Nov 2017 21:30:40 +0100 Subject: [PATCH] cache topics we're already subscribed to --- libguh-core/awsconnector.cpp | 11 ++++++++++- libguh-core/awsconnector.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libguh-core/awsconnector.cpp b/libguh-core/awsconnector.cpp index 352ce5db..620291ea 100644 --- a/libguh-core/awsconnector.cpp +++ b/libguh-core/awsconnector.cpp @@ -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(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> 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; diff --git a/libguh-core/awsconnector.h b/libguh-core/awsconnector.h index aff676b6..ac5dd31f 100644 --- a/libguh-core/awsconnector.h +++ b/libguh-core/awsconnector.h @@ -114,6 +114,7 @@ private: bool m_setupInProgress = false; int m_reconnectCounter = 0; QDateTime m_lastConnectionDrop; + QStringList m_subscriptionCache; std::shared_ptr m_subscriptionContextData; std::shared_ptr m_disconnectContextData;