shadow/source/IotShadowClient.cpp (816 lines of code) (raw):
/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*
* This file is generated
*/
#include <aws/iotshadow/IotShadowClient.h>
#include <aws/iotshadow/DeleteNamedShadowRequest.h>
#include <aws/iotshadow/DeleteNamedShadowSubscriptionRequest.h>
#include <aws/iotshadow/DeleteShadowRequest.h>
#include <aws/iotshadow/DeleteShadowResponse.h>
#include <aws/iotshadow/DeleteShadowSubscriptionRequest.h>
#include <aws/iotshadow/ErrorResponse.h>
#include <aws/iotshadow/GetNamedShadowRequest.h>
#include <aws/iotshadow/GetNamedShadowSubscriptionRequest.h>
#include <aws/iotshadow/GetShadowRequest.h>
#include <aws/iotshadow/GetShadowResponse.h>
#include <aws/iotshadow/GetShadowSubscriptionRequest.h>
#include <aws/iotshadow/NamedShadowDeltaUpdatedSubscriptionRequest.h>
#include <aws/iotshadow/NamedShadowUpdatedSubscriptionRequest.h>
#include <aws/iotshadow/ShadowDeltaUpdatedEvent.h>
#include <aws/iotshadow/ShadowDeltaUpdatedSubscriptionRequest.h>
#include <aws/iotshadow/ShadowUpdatedEvent.h>
#include <aws/iotshadow/ShadowUpdatedSubscriptionRequest.h>
#include <aws/iotshadow/UpdateNamedShadowRequest.h>
#include <aws/iotshadow/UpdateNamedShadowSubscriptionRequest.h>
#include <aws/iotshadow/UpdateShadowRequest.h>
#include <aws/iotshadow/UpdateShadowResponse.h>
#include <aws/iotshadow/UpdateShadowSubscriptionRequest.h>
namespace Aws
{
namespace Iotshadow
{
IotShadowClient::IotShadowClient(const std::shared_ptr<Aws::Crt::Mqtt::MqttConnection> &connection)
: m_connection(connection)
{
}
IotShadowClient::IotShadowClient(const std::shared_ptr<Aws::Crt::Mqtt5::Mqtt5Client> &mqtt5Client)
{
m_connection = Aws::Crt::Mqtt::MqttConnection::NewConnectionFromMqtt5Client(mqtt5Client);
}
IotShadowClient::operator bool() const noexcept
{
return m_connection && *m_connection;
}
int IotShadowClient::GetLastError() const noexcept
{
return aws_last_error();
}
bool IotShadowClient::SubscribeToDeleteNamedShadowAccepted(
const Aws::Iotshadow::DeleteNamedShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToDeleteNamedShadowAcceptedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::DeleteShadowResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/delete/accepted";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToDeleteNamedShadowRejected(
const Aws::Iotshadow::DeleteNamedShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToDeleteNamedShadowRejectedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ErrorResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/delete/rejected";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToDeleteShadowAccepted(
const Aws::Iotshadow::DeleteShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToDeleteShadowAcceptedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::DeleteShadowResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/delete/accepted";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToDeleteShadowRejected(
const Aws::Iotshadow::DeleteShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToDeleteShadowRejectedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ErrorResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/delete/rejected";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToGetNamedShadowAccepted(
const Aws::Iotshadow::GetNamedShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToGetNamedShadowAcceptedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::GetShadowResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/get/accepted";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToGetNamedShadowRejected(
const Aws::Iotshadow::GetNamedShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToGetNamedShadowRejectedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ErrorResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/get/rejected";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToGetShadowAccepted(
const Aws::Iotshadow::GetShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToGetShadowAcceptedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::GetShadowResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/get/accepted";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToGetShadowRejected(
const Aws::Iotshadow::GetShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToGetShadowRejectedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ErrorResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/get/rejected";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToNamedShadowDeltaUpdatedEvents(
const Aws::Iotshadow::NamedShadowDeltaUpdatedSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToNamedShadowDeltaUpdatedEventsResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ShadowDeltaUpdatedEvent response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/update/delta";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToNamedShadowUpdatedEvents(
const Aws::Iotshadow::NamedShadowUpdatedSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToNamedShadowUpdatedEventsResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ShadowUpdatedEvent response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/update/documents";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToShadowDeltaUpdatedEvents(
const Aws::Iotshadow::ShadowDeltaUpdatedSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToShadowDeltaUpdatedEventsResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ShadowDeltaUpdatedEvent response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/update/delta";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToShadowUpdatedEvents(
const Aws::Iotshadow::ShadowUpdatedSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToShadowUpdatedEventsResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ShadowUpdatedEvent response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/update/documents";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToUpdateNamedShadowAccepted(
const Aws::Iotshadow::UpdateNamedShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToUpdateNamedShadowAcceptedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::UpdateShadowResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/update/accepted";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToUpdateNamedShadowRejected(
const Aws::Iotshadow::UpdateNamedShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToUpdateNamedShadowRejectedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ErrorResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/update/rejected";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToUpdateShadowAccepted(
const Aws::Iotshadow::UpdateShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToUpdateShadowAcceptedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::UpdateShadowResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/update/accepted";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::SubscribeToUpdateShadowRejected(
const Aws::Iotshadow::UpdateShadowSubscriptionRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnSubscribeToUpdateShadowRejectedResponse &handler,
const OnSubscribeComplete &onSubAck)
{
(void)request;
auto onSubscribeComplete = [handler, onSubAck](
Aws::Crt::Mqtt::MqttConnection &,
uint16_t,
const Aws::Crt::String &topic,
Aws::Crt::Mqtt::QOS,
int errorCode)
{
(void)topic;
if (errorCode)
{
handler(nullptr, errorCode);
}
if (onSubAck)
{
onSubAck(errorCode);
}
};
auto onSubscribePublish =
[handler](Aws::Crt::Mqtt::MqttConnection &, const Aws::Crt::String &, const Aws::Crt::ByteBuf &payload)
{
Aws::Crt::String objectStr(reinterpret_cast<char *>(payload.buffer), payload.len);
Aws::Crt::JsonObject jsonObject(objectStr);
Aws::Iotshadow::ErrorResponse response(jsonObject);
handler(&response, AWS_ERROR_SUCCESS);
};
Aws::Crt::StringStream subscribeTopicSStr;
subscribeTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/update/rejected";
return m_connection->Subscribe(
subscribeTopicSStr.str().c_str(),
qos,
std::move(onSubscribePublish),
std::move(onSubscribeComplete)) != 0;
}
bool IotShadowClient::PublishDeleteNamedShadow(
const Aws::Iotshadow::DeleteNamedShadowRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnPublishComplete &onPubAck)
{
Aws::Crt::StringStream publishTopicSStr;
publishTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/delete";
Aws::Crt::JsonObject jsonObject;
request.SerializeToObject(jsonObject);
Aws::Crt::String outgoingJson = jsonObject.View().WriteCompact(true);
Aws::Crt::ByteBuf buf = Aws::Crt::ByteBufNewCopy(
Aws::Crt::g_allocator, reinterpret_cast<const uint8_t *>(outgoingJson.data()), outgoingJson.length());
auto onPublishComplete = [buf, onPubAck](Aws::Crt::Mqtt::MqttConnection &, uint16_t, int errorCode)
{
onPubAck(errorCode);
Aws::Crt::ByteBufDelete(const_cast<Aws::Crt::ByteBuf &>(buf));
};
return m_connection->Publish(
publishTopicSStr.str().c_str(), qos, false, buf, std::move(onPublishComplete)) != 0;
}
bool IotShadowClient::PublishDeleteShadow(
const Aws::Iotshadow::DeleteShadowRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnPublishComplete &onPubAck)
{
Aws::Crt::StringStream publishTopicSStr;
publishTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/delete";
Aws::Crt::JsonObject jsonObject;
request.SerializeToObject(jsonObject);
Aws::Crt::String outgoingJson = jsonObject.View().WriteCompact(true);
Aws::Crt::ByteBuf buf = Aws::Crt::ByteBufNewCopy(
Aws::Crt::g_allocator, reinterpret_cast<const uint8_t *>(outgoingJson.data()), outgoingJson.length());
auto onPublishComplete = [buf, onPubAck](Aws::Crt::Mqtt::MqttConnection &, uint16_t, int errorCode)
{
onPubAck(errorCode);
Aws::Crt::ByteBufDelete(const_cast<Aws::Crt::ByteBuf &>(buf));
};
return m_connection->Publish(
publishTopicSStr.str().c_str(), qos, false, buf, std::move(onPublishComplete)) != 0;
}
bool IotShadowClient::PublishGetNamedShadow(
const Aws::Iotshadow::GetNamedShadowRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnPublishComplete &onPubAck)
{
Aws::Crt::StringStream publishTopicSStr;
publishTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/get";
Aws::Crt::JsonObject jsonObject;
request.SerializeToObject(jsonObject);
Aws::Crt::String outgoingJson = jsonObject.View().WriteCompact(true);
Aws::Crt::ByteBuf buf = Aws::Crt::ByteBufNewCopy(
Aws::Crt::g_allocator, reinterpret_cast<const uint8_t *>(outgoingJson.data()), outgoingJson.length());
auto onPublishComplete = [buf, onPubAck](Aws::Crt::Mqtt::MqttConnection &, uint16_t, int errorCode)
{
onPubAck(errorCode);
Aws::Crt::ByteBufDelete(const_cast<Aws::Crt::ByteBuf &>(buf));
};
return m_connection->Publish(
publishTopicSStr.str().c_str(), qos, false, buf, std::move(onPublishComplete)) != 0;
}
bool IotShadowClient::PublishGetShadow(
const Aws::Iotshadow::GetShadowRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnPublishComplete &onPubAck)
{
Aws::Crt::StringStream publishTopicSStr;
publishTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/get";
Aws::Crt::JsonObject jsonObject;
request.SerializeToObject(jsonObject);
Aws::Crt::String outgoingJson = jsonObject.View().WriteCompact(true);
Aws::Crt::ByteBuf buf = Aws::Crt::ByteBufNewCopy(
Aws::Crt::g_allocator, reinterpret_cast<const uint8_t *>(outgoingJson.data()), outgoingJson.length());
auto onPublishComplete = [buf, onPubAck](Aws::Crt::Mqtt::MqttConnection &, uint16_t, int errorCode)
{
onPubAck(errorCode);
Aws::Crt::ByteBufDelete(const_cast<Aws::Crt::ByteBuf &>(buf));
};
return m_connection->Publish(
publishTopicSStr.str().c_str(), qos, false, buf, std::move(onPublishComplete)) != 0;
}
bool IotShadowClient::PublishUpdateNamedShadow(
const Aws::Iotshadow::UpdateNamedShadowRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnPublishComplete &onPubAck)
{
Aws::Crt::StringStream publishTopicSStr;
publishTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/name/" << *request.ShadowName
<< "/update";
Aws::Crt::JsonObject jsonObject;
request.SerializeToObject(jsonObject);
Aws::Crt::String outgoingJson = jsonObject.View().WriteCompact(true);
Aws::Crt::ByteBuf buf = Aws::Crt::ByteBufNewCopy(
Aws::Crt::g_allocator, reinterpret_cast<const uint8_t *>(outgoingJson.data()), outgoingJson.length());
auto onPublishComplete = [buf, onPubAck](Aws::Crt::Mqtt::MqttConnection &, uint16_t, int errorCode)
{
onPubAck(errorCode);
Aws::Crt::ByteBufDelete(const_cast<Aws::Crt::ByteBuf &>(buf));
};
return m_connection->Publish(
publishTopicSStr.str().c_str(), qos, false, buf, std::move(onPublishComplete)) != 0;
}
bool IotShadowClient::PublishUpdateShadow(
const Aws::Iotshadow::UpdateShadowRequest &request,
Aws::Crt::Mqtt::QOS qos,
const OnPublishComplete &onPubAck)
{
Aws::Crt::StringStream publishTopicSStr;
publishTopicSStr << "$aws/things/" << *request.ThingName << "/shadow/update";
Aws::Crt::JsonObject jsonObject;
request.SerializeToObject(jsonObject);
Aws::Crt::String outgoingJson = jsonObject.View().WriteCompact(true);
Aws::Crt::ByteBuf buf = Aws::Crt::ByteBufNewCopy(
Aws::Crt::g_allocator, reinterpret_cast<const uint8_t *>(outgoingJson.data()), outgoingJson.length());
auto onPublishComplete = [buf, onPubAck](Aws::Crt::Mqtt::MqttConnection &, uint16_t, int errorCode)
{
onPubAck(errorCode);
Aws::Crt::ByteBufDelete(const_cast<Aws::Crt::ByteBuf &>(buf));
};
return m_connection->Publish(
publishTopicSStr.str().c_str(), qos, false, buf, std::move(onPublishComplete)) != 0;
}
} // namespace Iotshadow
} // namespace Aws