cache topics we're already subscribed to
This commit is contained in:
parent
5b4b67454d
commit
6353b5bc96
@ -77,6 +77,7 @@ void AWSConnector::connect2AWS(const QString &endpoint, const QString &clientId,
|
|||||||
void AWSConnector::doConnect()
|
void AWSConnector::doConnect()
|
||||||
{
|
{
|
||||||
m_setupInProgress = true;
|
m_setupInProgress = true;
|
||||||
|
m_subscriptionCache.clear();
|
||||||
m_networkConnection = std::shared_ptr<MbedTLSConnection>(new MbedTLSConnection(
|
m_networkConnection = std::shared_ptr<MbedTLSConnection>(new MbedTLSConnection(
|
||||||
m_currentEndpoint.toStdString(),
|
m_currentEndpoint.toStdString(),
|
||||||
8883,
|
8883,
|
||||||
@ -193,7 +194,7 @@ void AWSConnector::disconnectAWS()
|
|||||||
{
|
{
|
||||||
m_shouldReconnect = false;
|
m_shouldReconnect = false;
|
||||||
if (isConnected()) {
|
if (isConnected()) {
|
||||||
m_client->Disconnect(std::chrono::seconds(2));
|
m_client->Disconnect(std::chrono::milliseconds(2000));
|
||||||
m_client.reset();
|
m_client.reset();
|
||||||
m_networkConnection.reset();
|
m_networkConnection.reset();
|
||||||
qCDebug(dcAWS()) << "Disconnected from AWS.";
|
qCDebug(dcAWS()) << "Disconnected from AWS.";
|
||||||
@ -297,6 +298,10 @@ quint16 AWSConnector::subscribe(const QStringList &topics)
|
|||||||
{
|
{
|
||||||
util::Vector<std::shared_ptr<mqtt::Subscription>> subscription_list;
|
util::Vector<std::shared_ptr<mqtt::Subscription>> subscription_list;
|
||||||
foreach (const QString &topic, topics) {
|
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;
|
qCDebug(dcAWSTraffic()) << "Topic to subscribe is" << topic;
|
||||||
if (!Subscription::IsValidTopicName(topic.toStdString())) {
|
if (!Subscription::IsValidTopicName(topic.toStdString())) {
|
||||||
qCWarning(dcAWS()) << "Trying to subscribe to invalid topic:" << topic;
|
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);
|
auto subscription = mqtt::Subscription::Create(Utf8String::Create(topic.toStdString()), mqtt::QoS::QOS1, &onSubscriptionReceivedCallback, m_subscriptionContextData);
|
||||||
subscription_list.push_back(subscription);
|
subscription_list.push_back(subscription);
|
||||||
|
m_subscriptionCache.append(topic);
|
||||||
|
}
|
||||||
|
if (subscription_list.size() == 0) {
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t packetId;
|
uint16_t packetId;
|
||||||
|
|||||||
@ -114,6 +114,7 @@ private:
|
|||||||
bool m_setupInProgress = false;
|
bool m_setupInProgress = false;
|
||||||
int m_reconnectCounter = 0;
|
int m_reconnectCounter = 0;
|
||||||
QDateTime m_lastConnectionDrop;
|
QDateTime m_lastConnectionDrop;
|
||||||
|
QStringList m_subscriptionCache;
|
||||||
|
|
||||||
std::shared_ptr<awsiotsdk::mqtt::SubscriptionHandlerContextData> m_subscriptionContextData;
|
std::shared_ptr<awsiotsdk::mqtt::SubscriptionHandlerContextData> m_subscriptionContextData;
|
||||||
std::shared_ptr<awsiotsdk::DisconnectCallbackContextData> m_disconnectContextData;
|
std::shared_ptr<awsiotsdk::DisconnectCallbackContextData> m_disconnectContextData;
|
||||||
|
|||||||
Reference in New Issue
Block a user