in shadow/source/IotShadowClient.cpp [733:785]
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;
}