AWS IoT Device SDK C++ v2  1.36.0
AWS IoT Device SDK C++ v2
MqttRequestResponseClient.h
Go to the documentation of this file.
1 #pragma once
2 
7 #include <aws/crt/Exports.h>
8 
9 #include <aws/crt/Allocator.h>
10 #include <aws/crt/Optional.h>
11 #include <aws/crt/Types.h>
12 #include <aws/crt/Variant.h>
14 #include <aws/mqtt/request-response/request_response_client.h>
15 
16 #include <functional>
17 
18 namespace Aws
19 {
20 
21  namespace Crt
22  {
23  namespace Mqtt
24  {
25  class MqttConnection;
26  }
27 
28  namespace Mqtt5
29  {
30  class Mqtt5Client;
31  }
32  } // namespace Crt
33 
34  namespace Iot
35  {
36  namespace RequestResponse
37  {
42  {
43 
47  SubscriptionEstablished = ARRSSET_SUBSCRIPTION_ESTABLISHED,
48 
52  SubscriptionLost = ARRSSET_SUBSCRIPTION_LOST,
53 
59  SubscriptionHalted = ARRSSET_SUBSCRIPTION_HALTED,
60  };
61 
66  {
67  public:
75  {
76  m_type = type;
77  return *this;
78  }
79 
87  {
88  m_errorCode = errorCode;
89  return *this;
90  }
91 
96  SubscriptionStatusEventType GetType() const { return m_type; }
97 
102  int GetErrorCode() const { return m_errorCode; }
103 
104  private:
105  SubscriptionStatusEventType m_type = SubscriptionStatusEventType::SubscriptionEstablished;
106  int m_errorCode = 0;
107  };
108 
113 
120  {
121  UserPropertyView(Aws::Crt::ByteCursor name, Aws::Crt::ByteCursor value) : m_name(name), m_value(value)
122  {
123  }
126  };
127 
134  {
135  public:
139  IncomingPublishEvent() : m_topic(), m_payload()
140  {
141  AWS_ZERO_STRUCT(m_topic);
142  AWS_ZERO_STRUCT(m_payload);
143  }
144 
152  {
153  m_topic = topic;
154  return *this;
155  }
156 
164  {
165  m_payload = payload;
166  return *this;
167  }
168 
176  {
177  m_contentType = contentType;
178  return *this;
179  }
180 
188  {
189  m_userProperties = std::move(userProperties);
190  return *this;
191  }
192 
199  IncomingPublishEvent &WithMessageExpiryIntervalSeconds(uint32_t messageExpiryIntervalSeconds)
200  {
201  m_messageExpiryIntervalSeconds = messageExpiryIntervalSeconds;
202  return *this;
203  }
204 
210  Aws::Crt::ByteCursor GetTopic() const { return m_topic; }
211 
217  Aws::Crt::ByteCursor GetPayload() const { return m_payload; }
218 
224  const Aws::Crt::Optional<Aws::Crt::ByteCursor> &GetContentType() const { return m_contentType; }
225 
231  {
232  return m_userProperties;
233  }
234 
236  {
237  return m_messageExpiryIntervalSeconds;
238  }
239 
240  private:
241  Aws::Crt::ByteCursor m_topic;
242  Aws::Crt::ByteCursor m_payload;
245  Aws::Crt::Optional<uint32_t> m_messageExpiryIntervalSeconds;
246  };
247 
253  using IncomingPublishEventHandler = std::function<void(IncomingPublishEvent &&)>;
254 
261  {
262  public:
266  UnmodeledResponse() : m_topic(), m_payload()
267  {
268  AWS_ZERO_STRUCT(m_payload);
269  AWS_ZERO_STRUCT(m_topic);
270  }
271 
279  {
280  m_payload = payload;
281  return *this;
282  }
283 
291  {
292  m_topic = topic;
293  return *this;
294  }
295 
301  Aws::Crt::ByteCursor GetPayload() const { return m_payload; }
302 
308  Aws::Crt::ByteCursor GetTopic() const { return m_topic; }
309 
310  private:
315  Aws::Crt::ByteCursor m_topic;
316 
320  Aws::Crt::ByteCursor m_payload;
321  };
322 
329  template <typename R, typename E> class Result
330  {
331  public:
332  Result() = delete;
333 
334  explicit Result(const R &response) : m_rawResult(response) {}
335  explicit Result(R &&response) : m_rawResult(std::move(response)) {}
336  explicit Result(const E &error) : m_rawResult(error) {}
337  explicit Result(E &&error) : m_rawResult(std::move(error)) {}
338 
339  Result &operator=(const R &response)
340  {
341  this->m_rawResult = response;
342 
343  return *this;
344  }
345 
346  Result &operator=(R &&response)
347  {
348  this->m_rawResult = std::move(response);
349 
350  return *this;
351  }
352 
353  Result &operator=(const E &error)
354  {
355  this->m_rawResult = error;
356  return *this;
357  }
358 
359  Result &operator=(E &&error)
360  {
361  this->m_rawResult = std::move(error);
362 
363  return *this;
364  }
365 
366  bool IsSuccess() const { return m_rawResult.template holds_alternative<R>(); }
367 
368  const R &GetResponse() const
369  {
370  AWS_FATAL_ASSERT(IsSuccess());
371 
372  return m_rawResult.template get<R>();
373  }
374 
375  const E &GetError() const
376  {
377  AWS_FATAL_ASSERT(!IsSuccess());
378 
379  return m_rawResult.template get<E>();
380  }
381 
382  private:
383  Aws::Crt::Variant<R, E> m_rawResult;
384  };
385 
391 
397  using UnmodeledResultHandler = std::function<void(UnmodeledResult &&)>;
398 
404  template <typename T> class StreamingOperationOptions
405  {
406  public:
414  const SubscriptionStatusEventHandler &handler)
415  {
416  m_subscriptionStatusEventHandler = handler;
417  return *this;
418  }
419 
426  StreamingOperationOptions &WithStreamHandler(const std::function<void(T &&)> &handler)
427  {
428  m_streamHandler = handler;
429  return *this;
430  }
431 
438  {
439  return m_subscriptionStatusEventHandler;
440  }
441 
447  const std::function<void(T &&)> &GetStreamHandler() const { return m_streamHandler; }
448 
449  private:
450  SubscriptionStatusEventHandler m_subscriptionStatusEventHandler;
451 
452  std::function<void(T &&)> m_streamHandler;
453  };
454 
462  {
463  public:
465  : subscriptionTopicFilter(), subscriptionStatusEventHandler(), incomingPublishEventHandler()
466  {
467  AWS_ZERO_STRUCT(subscriptionTopicFilter);
468  }
469 
471 
473 
475  };
476 
481  {
482  public:
487  virtual ~IStreamingOperation() = default;
488 
492  virtual void Open() = 0;
493  };
494 
499  {
500  public:
512  uint32_t maxRequestResponseSubscriptions)
513  {
514  m_maxRequestResponseSubscriptions = maxRequestResponseSubscriptions;
515  return *this;
516  }
517 
527  RequestResponseClientOptions &WithMaxStreamingSubscriptions(uint32_t maxStreamingSubscriptions)
528  {
529  m_maxStreamingSubscriptions = maxStreamingSubscriptions;
530  return *this;
531  }
532 
541  RequestResponseClientOptions &WithOperationTimeoutInSeconds(uint32_t operationTimeoutInSeconds)
542  {
543  m_operationTimeoutInSeconds = operationTimeoutInSeconds;
544  return *this;
545  }
546 
554  uint32_t GetMaxRequestResponseSubscriptions() const { return m_maxRequestResponseSubscriptions; }
555 
561  uint32_t GetMaxStreamingSubscriptions() const { return m_maxStreamingSubscriptions; }
562 
568  uint32_t GetOperationTimeoutInSeconds() const { return m_operationTimeoutInSeconds; }
569 
570  private:
574  uint32_t m_maxRequestResponseSubscriptions = 0;
575 
579  uint32_t m_maxStreamingSubscriptions = 0;
580 
584  uint32_t m_operationTimeoutInSeconds = 0;
585  };
586 
591  {
592  public:
597  virtual ~IMqttRequestResponseClient() = default;
598 
606  virtual int SubmitRequest(
607  const aws_mqtt_request_operation_options &requestOptions,
608  UnmodeledResultHandler &&resultHandler) = 0;
609 
617  virtual std::shared_ptr<IStreamingOperation> CreateStream(
618  const StreamingOperationOptionsInternal &options) = 0;
619  };
620 
629  AWS_CRT_CPP_API std::shared_ptr<IMqttRequestResponseClient> NewClientFrom5(
630  const Aws::Crt::Mqtt5::Mqtt5Client &protocolClient,
631  const RequestResponseClientOptions &options,
633 
642  AWS_CRT_CPP_API std::shared_ptr<IMqttRequestResponseClient> NewClientFrom311(
643  const Aws::Crt::Mqtt::MqttConnection &protocolClient,
644  const RequestResponseClientOptions &options,
646 
647  } // namespace RequestResponse
648  } // namespace Iot
649 } // namespace Aws
Aws::Iot::RequestResponse::IMqttRequestResponseClient
Definition: MqttRequestResponseClient.h:591
Aws::Iot::RequestResponse::IncomingPublishEvent::WithContentType
IncomingPublishEvent & WithContentType(Aws::Crt::ByteCursor contentType)
Definition: MqttRequestResponseClient.h:175
Aws::Iot::RequestResponse::Result::Result
Result(R &&response)
Definition: MqttRequestResponseClient.h:335
Aws::Iot::RequestResponse::IMqttRequestResponseClient::~IMqttRequestResponseClient
virtual ~IMqttRequestResponseClient()=default
Aws::Iot::RequestResponse::IncomingPublishEvent::GetUserProperties
const Aws::Crt::Optional< Aws::Crt::Vector< UserPropertyView > > & GetUserProperties() const
Definition: MqttRequestResponseClient.h:230
Aws::Iot::RequestResponse::IStreamingOperation
Definition: MqttRequestResponseClient.h:481
Aws::Iot::RequestResponse::SubscriptionStatusEvent
Definition: MqttRequestResponseClient.h:66
Aws::Iot::RequestResponse::SubscriptionStatusEventType::SubscriptionEstablished
@ SubscriptionEstablished
Aws::Iot::RequestResponse::IMqttRequestResponseClient::SubmitRequest
virtual int SubmitRequest(const aws_mqtt_request_operation_options &requestOptions, UnmodeledResultHandler &&resultHandler)=0
Aws::Iot::RequestResponse::StreamingOperationOptions::WithSubscriptionStatusEventHandler
StreamingOperationOptions & WithSubscriptionStatusEventHandler(const SubscriptionStatusEventHandler &handler)
Definition: MqttRequestResponseClient.h:413
Aws::Iot::RequestResponse::Result::GetError
const E & GetError() const
Definition: MqttRequestResponseClient.h:375
Aws::Iot::RequestResponse::SubscriptionStatusEvent::WithErrorCode
SubscriptionStatusEvent & WithErrorCode(int errorCode)
Definition: MqttRequestResponseClient.h:86
Aws::Crt::ApiAllocator
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition: Allocator.cpp:24
Aws::Iot::RequestResponse::IncomingPublishEvent::GetContentType
const Aws::Crt::Optional< Aws::Crt::ByteCursor > & GetContentType() const
Definition: MqttRequestResponseClient.h:224
Aws::Iot::RequestResponse::IncomingPublishEvent::WithUserProperties
IncomingPublishEvent & WithUserProperties(Aws::Crt::Vector< UserPropertyView > userProperties)
Definition: MqttRequestResponseClient.h:187
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal::StreamingOperationOptionsInternal
StreamingOperationOptionsInternal()
Definition: MqttRequestResponseClient.h:464
Aws::Iot::RequestResponse::Result::GetResponse
const R & GetResponse() const
Definition: MqttRequestResponseClient.h:368
Aws::Iot::RequestResponse::Result::Result
Result()=delete
Aws::Iot::RequestResponse::IncomingPublishEventHandler
std::function< void(IncomingPublishEvent &&)> IncomingPublishEventHandler
Definition: MqttRequestResponseClient.h:253
Aws::Iot::RequestResponse::RequestResponseClientOptions::WithMaxRequestResponseSubscriptions
RequestResponseClientOptions & WithMaxRequestResponseSubscriptions(uint32_t maxRequestResponseSubscriptions)
Definition: MqttRequestResponseClient.h:511
Aws::Iot::RequestResponse::UnmodeledResponse::UnmodeledResponse
UnmodeledResponse()
Definition: MqttRequestResponseClient.h:266
Aws::Iot::RequestResponse::IMqttRequestResponseClient::CreateStream
virtual std::shared_ptr< IStreamingOperation > CreateStream(const StreamingOperationOptionsInternal &options)=0
Aws::Iot::RequestResponse::NewClientFrom5
AWS_CRT_CPP_API std::shared_ptr< IMqttRequestResponseClient > NewClientFrom5(const Aws::Crt::Mqtt5::Mqtt5Client &protocolClient, const RequestResponseClientOptions &options, Aws::Crt::Allocator *allocator=Aws::Crt::ApiAllocator())
Definition: MqttRequestResponseClient.cpp:469
Aws::Iot::RequestResponse::RequestResponseClientOptions::WithOperationTimeoutInSeconds
RequestResponseClientOptions & WithOperationTimeoutInSeconds(uint32_t operationTimeoutInSeconds)
Definition: MqttRequestResponseClient.h:541
Aws::Iot::RequestResponse::UnmodeledResponse::WithTopic
UnmodeledResponse & WithTopic(Aws::Crt::ByteCursor topic)
Definition: MqttRequestResponseClient.h:290
Aws::Iot::RequestResponse::StreamingOperationOptions::GetSubscriptionStatusEventHandler
const SubscriptionStatusEventHandler & GetSubscriptionStatusEventHandler() const
Definition: MqttRequestResponseClient.h:437
Aws::Iot::RequestResponse::SubscriptionStatusEvent::WithType
SubscriptionStatusEvent & WithType(SubscriptionStatusEventType type)
Definition: MqttRequestResponseClient.h:74
Aws::Iot::RequestResponse::SubscriptionStatusEvent::GetErrorCode
int GetErrorCode() const
Definition: MqttRequestResponseClient.h:102
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal
Definition: MqttRequestResponseClient.h:462
Aws::Iot::RequestResponse::SubscriptionStatusEventType
SubscriptionStatusEventType
Definition: MqttRequestResponseClient.h:42
Aws::Crt::Mqtt::MqttConnection
Definition: MqttConnection.h:158
Aws::Iot::RequestResponse::Result::Result
Result(const E &error)
Definition: MqttRequestResponseClient.h:336
Aws::Crt::Mqtt5::Mqtt5Client
Definition: Mqtt5Client.h:332
Aws::Iot::RequestResponse::UserPropertyView::m_name
Aws::Crt::ByteCursor m_name
Definition: MqttRequestResponseClient.h:124
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal::incomingPublishEventHandler
IncomingPublishEventHandler incomingPublishEventHandler
Definition: MqttRequestResponseClient.h:474
Aws::Iot::RequestResponse::RequestResponseClientOptions::GetOperationTimeoutInSeconds
uint32_t GetOperationTimeoutInSeconds() const
Definition: MqttRequestResponseClient.h:568
Aws::Iot::RequestResponse::IncomingPublishEvent::GetMessageExpiryIntervalSeconds
const Aws::Crt::Optional< uint32_t > & GetMessageExpiryIntervalSeconds() const
Definition: MqttRequestResponseClient.h:235
Aws::Iot::RequestResponse::RequestResponseClientOptions
Definition: MqttRequestResponseClient.h:499
Aws::Iot::RequestResponse::Result::operator=
Result & operator=(const E &error)
Definition: MqttRequestResponseClient.h:353
Aws::Iot::RequestResponse::RequestResponseClientOptions::GetMaxStreamingSubscriptions
uint32_t GetMaxStreamingSubscriptions() const
Definition: MqttRequestResponseClient.h:561
Aws::Iot::RequestResponse::UnmodeledResponse
Definition: MqttRequestResponseClient.h:261
Aws::Iot::RequestResponse::RequestResponseClientOptions::GetMaxRequestResponseSubscriptions
uint32_t GetMaxRequestResponseSubscriptions() const
Definition: MqttRequestResponseClient.h:554
Aws::Iot::RequestResponse::IncomingPublishEvent
Definition: MqttRequestResponseClient.h:134
Optional.h
Aws::Crt::Optional< Aws::Crt::ByteCursor >
Aws::Crt::Variant< R, E >
Aws::Iot::RequestResponse::SubscriptionStatusEvent::GetType
SubscriptionStatusEventType GetType() const
Definition: MqttRequestResponseClient.h:96
Aws::Iot::RequestResponse::Result
Definition: MqttRequestResponseClient.h:330
Aws::Iot::RequestResponse::Result::operator=
Result & operator=(const R &response)
Definition: MqttRequestResponseClient.h:339
Aws::Iot::RequestResponse::IncomingPublishEvent::IncomingPublishEvent
IncomingPublishEvent()
Definition: MqttRequestResponseClient.h:139
Aws::Iot::RequestResponse::Result::operator=
Result & operator=(E &&error)
Definition: MqttRequestResponseClient.h:359
Allocator.h
Aws::Iot::RequestResponse::UserPropertyView
Definition: MqttRequestResponseClient.h:120
Aws::Iot::RequestResponse::Result::operator=
Result & operator=(R &&response)
Definition: MqttRequestResponseClient.h:346
Aws::Iot::RequestResponse::SubscriptionStatusEventHandler
std::function< void(SubscriptionStatusEvent &&)> SubscriptionStatusEventHandler
Definition: MqttRequestResponseClient.h:112
Aws::Iot::RequestResponse::Result::Result
Result(E &&error)
Definition: MqttRequestResponseClient.h:337
Aws::Iot::RequestResponse::IncomingPublishEvent::WithMessageExpiryIntervalSeconds
IncomingPublishEvent & WithMessageExpiryIntervalSeconds(uint32_t messageExpiryIntervalSeconds)
Definition: MqttRequestResponseClient.h:199
Types.h
Aws::Iot::RequestResponse::IncomingPublishEvent::GetTopic
Aws::Crt::ByteCursor GetTopic() const
Definition: MqttRequestResponseClient.h:210
Mqtt5Packets.h
Variant.h
Aws::Iot::RequestResponse::NewClientFrom311
AWS_CRT_CPP_API std::shared_ptr< IMqttRequestResponseClient > NewClientFrom311(const Aws::Crt::Mqtt::MqttConnection &protocolClient, const RequestResponseClientOptions &options, Aws::Crt::Allocator *allocator=Aws::Crt::ApiAllocator())
Definition: MqttRequestResponseClient.cpp:498
Aws::Iot::RequestResponse::IStreamingOperation::~IStreamingOperation
virtual ~IStreamingOperation()=default
Aws::Iot::RequestResponse::Result::IsSuccess
bool IsSuccess() const
Definition: MqttRequestResponseClient.h:366
Aws::Crt::Vector
std::vector< T, StlAllocator< T > > Vector
Definition: Types.h:53
Aws::Iot::RequestResponse::StreamingOperationOptions::WithStreamHandler
StreamingOperationOptions & WithStreamHandler(const std::function< void(T &&)> &handler)
Definition: MqttRequestResponseClient.h:426
std
Definition: StringView.h:862
AWS_CRT_CPP_API
#define AWS_CRT_CPP_API
Definition: Exports.h:36
Aws::Iot::RequestResponse::IncomingPublishEvent::GetPayload
Aws::Crt::ByteCursor GetPayload() const
Definition: MqttRequestResponseClient.h:217
Aws::Iot::RequestResponse::IncomingPublishEvent::WithPayload
IncomingPublishEvent & WithPayload(Aws::Crt::ByteCursor payload)
Definition: MqttRequestResponseClient.h:163
Aws
Definition: Allocator.h:11
Aws::Crt::ByteCursor
aws_byte_cursor ByteCursor
Definition: Types.h:31
Aws::Iot::RequestResponse::UserPropertyView::UserPropertyView
UserPropertyView(Aws::Crt::ByteCursor name, Aws::Crt::ByteCursor value)
Definition: MqttRequestResponseClient.h:121
Aws::Crt::Allocator
aws_allocator Allocator
Definition: Allocator.h:14
Exports.h
Aws::Iot::RequestResponse::StreamingOperationOptions
Definition: MqttRequestResponseClient.h:405
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal::subscriptionStatusEventHandler
SubscriptionStatusEventHandler subscriptionStatusEventHandler
Definition: MqttRequestResponseClient.h:472
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal::subscriptionTopicFilter
Aws::Crt::ByteCursor subscriptionTopicFilter
Definition: MqttRequestResponseClient.h:470
Aws::Iot::RequestResponse::UnmodeledResultHandler
std::function< void(UnmodeledResult &&)> UnmodeledResultHandler
Definition: MqttRequestResponseClient.h:397
Aws::Iot::RequestResponse::RequestResponseClientOptions::WithMaxStreamingSubscriptions
RequestResponseClientOptions & WithMaxStreamingSubscriptions(uint32_t maxStreamingSubscriptions)
Definition: MqttRequestResponseClient.h:527
Aws::Iot::RequestResponse::Result::Result
Result(const R &response)
Definition: MqttRequestResponseClient.h:334
Aws::Iot::RequestResponse::UnmodeledResponse::WithPayload
UnmodeledResponse & WithPayload(Aws::Crt::ByteCursor payload)
Definition: MqttRequestResponseClient.h:278
Aws::Iot::RequestResponse::IStreamingOperation::Open
virtual void Open()=0
Aws::Iot::RequestResponse::UnmodeledResponse::GetPayload
Aws::Crt::ByteCursor GetPayload() const
Definition: MqttRequestResponseClient.h:301
Aws::Iot::RequestResponse::IncomingPublishEvent::WithTopic
IncomingPublishEvent & WithTopic(Aws::Crt::ByteCursor topic)
Definition: MqttRequestResponseClient.h:151
Aws::Iot::RequestResponse::UnmodeledResponse::GetTopic
Aws::Crt::ByteCursor GetTopic() const
Definition: MqttRequestResponseClient.h:308
Aws::Iot::RequestResponse::UserPropertyView::m_value
Aws::Crt::ByteCursor m_value
Definition: MqttRequestResponseClient.h:125
Aws::Iot::RequestResponse::StreamingOperationOptions::GetStreamHandler
const std::function< void(T &&)> & GetStreamHandler() const
Definition: MqttRequestResponseClient.h:447