AWS IoT Device SDK C++ v2  1.35.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>
13 #include <aws/mqtt/request-response/request_response_client.h>
14 
15 #include <functional>
16 
17 namespace Aws
18 {
19 
20  namespace Crt
21  {
22  namespace Mqtt
23  {
24  class MqttConnection;
25  }
26 
27  namespace Mqtt5
28  {
29  class Mqtt5Client;
30  }
31  } // namespace Crt
32 
33  namespace Iot
34  {
35  namespace RequestResponse
36  {
41  {
42 
46  SubscriptionEstablished = ARRSSET_SUBSCRIPTION_ESTABLISHED,
47 
51  SubscriptionLost = ARRSSET_SUBSCRIPTION_LOST,
52 
58  SubscriptionHalted = ARRSSET_SUBSCRIPTION_HALTED,
59  };
60 
65  {
66  public:
74  {
75  m_type = type;
76  return *this;
77  }
78 
86  {
87  m_errorCode = errorCode;
88  return *this;
89  }
90 
95  SubscriptionStatusEventType GetType() const { return m_type; }
96 
101  int GetErrorCode() const { return m_errorCode; }
102 
103  private:
104  SubscriptionStatusEventType m_type = SubscriptionStatusEventType::SubscriptionEstablished;
105  int m_errorCode = 0;
106  };
107 
112 
119  {
120  public:
124  IncomingPublishEvent() : m_topic(), m_payload()
125  {
126  AWS_ZERO_STRUCT(m_topic);
127  AWS_ZERO_STRUCT(m_payload);
128  }
129 
137  {
138  m_topic = topic;
139  return *this;
140  }
141 
149  {
150  m_payload = payload;
151  return *this;
152  }
153 
159  Aws::Crt::ByteCursor GetTopic() const { return m_topic; }
160 
166  Aws::Crt::ByteCursor GetPayload() const { return m_payload; }
167 
168  private:
169  Aws::Crt::ByteCursor m_topic;
170  Aws::Crt::ByteCursor m_payload;
171  };
172 
178  using IncomingPublishEventHandler = std::function<void(IncomingPublishEvent &&)>;
179 
186  {
187  public:
191  UnmodeledResponse() : m_topic(), m_payload()
192  {
193  AWS_ZERO_STRUCT(m_payload);
194  AWS_ZERO_STRUCT(m_topic);
195  }
196 
204  {
205  m_payload = payload;
206  return *this;
207  }
208 
216  {
217  m_topic = topic;
218  return *this;
219  }
220 
226  Aws::Crt::ByteCursor GetPayload() const { return m_payload; }
227 
233  Aws::Crt::ByteCursor GetTopic() const { return m_topic; }
234 
235  private:
240  Aws::Crt::ByteCursor m_topic;
241 
245  Aws::Crt::ByteCursor m_payload;
246  };
247 
254  template <typename R, typename E> class Result
255  {
256  public:
257  Result() = delete;
258 
259  explicit Result(const R &response) : m_rawResult(response) {}
260  explicit Result(R &&response) : m_rawResult(std::move(response)) {}
261  explicit Result(const E &error) : m_rawResult(error) {}
262  explicit Result(E &&error) : m_rawResult(std::move(error)) {}
263 
264  Result &operator=(const R &response)
265  {
266  this->m_rawResult = response;
267 
268  return *this;
269  }
270 
271  Result &operator=(R &&response)
272  {
273  this->m_rawResult = std::move(response);
274 
275  return *this;
276  }
277 
278  Result &operator=(const E &error)
279  {
280  this->m_rawResult = error;
281  return *this;
282  }
283 
284  Result &operator=(E &&error)
285  {
286  this->m_rawResult = std::move(error);
287 
288  return *this;
289  }
290 
291  bool IsSuccess() const { return m_rawResult.template holds_alternative<R>(); }
292 
293  const R &GetResponse() const
294  {
295  AWS_FATAL_ASSERT(IsSuccess());
296 
297  return m_rawResult.template get<R>();
298  }
299 
300  const E &GetError() const
301  {
302  AWS_FATAL_ASSERT(!IsSuccess());
303 
304  return m_rawResult.template get<E>();
305  }
306 
307  private:
308  Aws::Crt::Variant<R, E> m_rawResult;
309  };
310 
316 
322  using UnmodeledResultHandler = std::function<void(UnmodeledResult &&)>;
323 
329  template <typename T> class StreamingOperationOptions
330  {
331  public:
339  const SubscriptionStatusEventHandler &handler)
340  {
341  m_subscriptionStatusEventHandler = handler;
342  return *this;
343  }
344 
351  StreamingOperationOptions &WithStreamHandler(const std::function<void(T &&)> &handler)
352  {
353  m_streamHandler = handler;
354  return *this;
355  }
356 
363  {
364  return m_subscriptionStatusEventHandler;
365  }
366 
372  const std::function<void(T &&)> &GetStreamHandler() const { return m_streamHandler; }
373 
374  private:
375  SubscriptionStatusEventHandler m_subscriptionStatusEventHandler;
376 
377  std::function<void(T &&)> m_streamHandler;
378  };
379 
387  {
388  public:
390  : subscriptionTopicFilter(), subscriptionStatusEventHandler(), incomingPublishEventHandler()
391  {
392  AWS_ZERO_STRUCT(subscriptionTopicFilter);
393  }
394 
396 
398 
400  };
401 
406  {
407  public:
412  virtual ~IStreamingOperation() = default;
413 
417  virtual void Open() = 0;
418  };
419 
424  {
425  public:
437  uint32_t maxRequestResponseSubscriptions)
438  {
439  m_maxRequestResponseSubscriptions = maxRequestResponseSubscriptions;
440  return *this;
441  }
442 
452  RequestResponseClientOptions &WithMaxStreamingSubscriptions(uint32_t maxStreamingSubscriptions)
453  {
454  m_maxStreamingSubscriptions = maxStreamingSubscriptions;
455  return *this;
456  }
457 
466  RequestResponseClientOptions &WithOperationTimeoutInSeconds(uint32_t operationTimeoutInSeconds)
467  {
468  m_operationTimeoutInSeconds = operationTimeoutInSeconds;
469  return *this;
470  }
471 
479  uint32_t GetMaxRequestResponseSubscriptions() const { return m_maxRequestResponseSubscriptions; }
480 
486  uint32_t GetMaxStreamingSubscriptions() const { return m_maxStreamingSubscriptions; }
487 
493  uint32_t GetOperationTimeoutInSeconds() const { return m_operationTimeoutInSeconds; }
494 
495  private:
499  uint32_t m_maxRequestResponseSubscriptions = 0;
500 
504  uint32_t m_maxStreamingSubscriptions = 0;
505 
509  uint32_t m_operationTimeoutInSeconds = 0;
510  };
511 
516  {
517  public:
522  virtual ~IMqttRequestResponseClient() = default;
523 
531  virtual int SubmitRequest(
532  const aws_mqtt_request_operation_options &requestOptions,
533  UnmodeledResultHandler &&resultHandler) = 0;
534 
542  virtual std::shared_ptr<IStreamingOperation> CreateStream(
543  const StreamingOperationOptionsInternal &options) = 0;
544  };
545 
554  AWS_CRT_CPP_API std::shared_ptr<IMqttRequestResponseClient> NewClientFrom5(
555  const Aws::Crt::Mqtt5::Mqtt5Client &protocolClient,
556  const RequestResponseClientOptions &options,
558 
567  AWS_CRT_CPP_API std::shared_ptr<IMqttRequestResponseClient> NewClientFrom311(
568  const Aws::Crt::Mqtt::MqttConnection &protocolClient,
569  const RequestResponseClientOptions &options,
571 
572  } // namespace RequestResponse
573  } // namespace Iot
574 } // namespace Aws
Aws::Iot::RequestResponse::IMqttRequestResponseClient
Definition: MqttRequestResponseClient.h:516
Aws::Iot::RequestResponse::Result::Result
Result(R &&response)
Definition: MqttRequestResponseClient.h:260
Aws::Iot::RequestResponse::IMqttRequestResponseClient::~IMqttRequestResponseClient
virtual ~IMqttRequestResponseClient()=default
Aws::Iot::RequestResponse::IStreamingOperation
Definition: MqttRequestResponseClient.h:406
Aws::Iot::RequestResponse::SubscriptionStatusEvent
Definition: MqttRequestResponseClient.h:65
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:338
Aws::Iot::RequestResponse::Result::GetError
const E & GetError() const
Definition: MqttRequestResponseClient.h:300
Aws::Iot::RequestResponse::SubscriptionStatusEvent::WithErrorCode
SubscriptionStatusEvent & WithErrorCode(int errorCode)
Definition: MqttRequestResponseClient.h:85
Aws::Crt::ApiAllocator
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition: Allocator.cpp:24
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal::StreamingOperationOptionsInternal
StreamingOperationOptionsInternal()
Definition: MqttRequestResponseClient.h:389
Aws::Iot::RequestResponse::Result::GetResponse
const R & GetResponse() const
Definition: MqttRequestResponseClient.h:293
Aws::Iot::RequestResponse::Result::Result
Result()=delete
Aws::Iot::RequestResponse::IncomingPublishEventHandler
std::function< void(IncomingPublishEvent &&)> IncomingPublishEventHandler
Definition: MqttRequestResponseClient.h:178
Aws::Iot::RequestResponse::RequestResponseClientOptions::WithMaxRequestResponseSubscriptions
RequestResponseClientOptions & WithMaxRequestResponseSubscriptions(uint32_t maxRequestResponseSubscriptions)
Definition: MqttRequestResponseClient.h:436
Aws::Iot::RequestResponse::UnmodeledResponse::UnmodeledResponse
UnmodeledResponse()
Definition: MqttRequestResponseClient.h:191
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:455
Aws::Iot::RequestResponse::RequestResponseClientOptions::WithOperationTimeoutInSeconds
RequestResponseClientOptions & WithOperationTimeoutInSeconds(uint32_t operationTimeoutInSeconds)
Definition: MqttRequestResponseClient.h:466
Aws::Iot::RequestResponse::UnmodeledResponse::WithTopic
UnmodeledResponse & WithTopic(Aws::Crt::ByteCursor topic)
Definition: MqttRequestResponseClient.h:215
Aws::Iot::RequestResponse::StreamingOperationOptions::GetSubscriptionStatusEventHandler
const SubscriptionStatusEventHandler & GetSubscriptionStatusEventHandler() const
Definition: MqttRequestResponseClient.h:362
Aws::Iot::RequestResponse::SubscriptionStatusEvent::WithType
SubscriptionStatusEvent & WithType(SubscriptionStatusEventType type)
Definition: MqttRequestResponseClient.h:73
Aws::Iot::RequestResponse::SubscriptionStatusEvent::GetErrorCode
int GetErrorCode() const
Definition: MqttRequestResponseClient.h:101
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal
Definition: MqttRequestResponseClient.h:387
Aws::Iot::RequestResponse::SubscriptionStatusEventType
SubscriptionStatusEventType
Definition: MqttRequestResponseClient.h:41
Aws::Crt::Mqtt::MqttConnection
Definition: MqttConnection.h:158
Aws::Iot::RequestResponse::Result::Result
Result(const E &error)
Definition: MqttRequestResponseClient.h:261
Aws::Crt::Mqtt5::Mqtt5Client
Definition: Mqtt5Client.h:332
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal::incomingPublishEventHandler
IncomingPublishEventHandler incomingPublishEventHandler
Definition: MqttRequestResponseClient.h:399
Aws::Iot::RequestResponse::RequestResponseClientOptions::GetOperationTimeoutInSeconds
uint32_t GetOperationTimeoutInSeconds() const
Definition: MqttRequestResponseClient.h:493
Aws::Iot::RequestResponse::RequestResponseClientOptions
Definition: MqttRequestResponseClient.h:424
Aws::Iot::RequestResponse::Result::operator=
Result & operator=(const E &error)
Definition: MqttRequestResponseClient.h:278
Aws::Iot::RequestResponse::RequestResponseClientOptions::GetMaxStreamingSubscriptions
uint32_t GetMaxStreamingSubscriptions() const
Definition: MqttRequestResponseClient.h:486
Aws::Iot::RequestResponse::UnmodeledResponse
Definition: MqttRequestResponseClient.h:186
Aws::Iot::RequestResponse::RequestResponseClientOptions::GetMaxRequestResponseSubscriptions
uint32_t GetMaxRequestResponseSubscriptions() const
Definition: MqttRequestResponseClient.h:479
Aws::Iot::RequestResponse::IncomingPublishEvent
Definition: MqttRequestResponseClient.h:119
Optional.h
Aws::Crt::Variant< R, E >
Aws::Iot::RequestResponse::SubscriptionStatusEvent::GetType
SubscriptionStatusEventType GetType() const
Definition: MqttRequestResponseClient.h:95
Aws::Iot::RequestResponse::Result
Definition: MqttRequestResponseClient.h:255
Aws::Iot::RequestResponse::Result::operator=
Result & operator=(const R &response)
Definition: MqttRequestResponseClient.h:264
Aws::Iot::RequestResponse::IncomingPublishEvent::IncomingPublishEvent
IncomingPublishEvent()
Definition: MqttRequestResponseClient.h:124
Aws::Iot::RequestResponse::Result::operator=
Result & operator=(E &&error)
Definition: MqttRequestResponseClient.h:284
Allocator.h
Aws::Iot::RequestResponse::Result::operator=
Result & operator=(R &&response)
Definition: MqttRequestResponseClient.h:271
Aws::Iot::RequestResponse::SubscriptionStatusEventHandler
std::function< void(SubscriptionStatusEvent &&)> SubscriptionStatusEventHandler
Definition: MqttRequestResponseClient.h:111
Aws::Iot::RequestResponse::Result::Result
Result(E &&error)
Definition: MqttRequestResponseClient.h:262
Types.h
Aws::Iot::RequestResponse::IncomingPublishEvent::GetTopic
Aws::Crt::ByteCursor GetTopic() const
Definition: MqttRequestResponseClient.h:159
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:484
Aws::Iot::RequestResponse::IStreamingOperation::~IStreamingOperation
virtual ~IStreamingOperation()=default
Aws::Iot::RequestResponse::Result::IsSuccess
bool IsSuccess() const
Definition: MqttRequestResponseClient.h:291
Aws::Iot::RequestResponse::StreamingOperationOptions::WithStreamHandler
StreamingOperationOptions & WithStreamHandler(const std::function< void(T &&)> &handler)
Definition: MqttRequestResponseClient.h:351
std
Definition: StringView.h:852
AWS_CRT_CPP_API
#define AWS_CRT_CPP_API
Definition: Exports.h:37
Aws::Iot::RequestResponse::IncomingPublishEvent::GetPayload
Aws::Crt::ByteCursor GetPayload() const
Definition: MqttRequestResponseClient.h:166
Aws::Iot::RequestResponse::IncomingPublishEvent::WithPayload
IncomingPublishEvent & WithPayload(Aws::Crt::ByteCursor payload)
Definition: MqttRequestResponseClient.h:148
Aws
Definition: Allocator.h:11
Aws::Crt::ByteCursor
aws_byte_cursor ByteCursor
Definition: Types.h:31
Aws::Crt::Allocator
aws_allocator Allocator
Definition: Allocator.h:14
Exports.h
Aws::Iot::RequestResponse::StreamingOperationOptions
Definition: MqttRequestResponseClient.h:330
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal::subscriptionStatusEventHandler
SubscriptionStatusEventHandler subscriptionStatusEventHandler
Definition: MqttRequestResponseClient.h:397
Aws::Iot::RequestResponse::StreamingOperationOptionsInternal::subscriptionTopicFilter
Aws::Crt::ByteCursor subscriptionTopicFilter
Definition: MqttRequestResponseClient.h:395
Aws::Iot::RequestResponse::UnmodeledResultHandler
std::function< void(UnmodeledResult &&)> UnmodeledResultHandler
Definition: MqttRequestResponseClient.h:322
Aws::Iot::RequestResponse::RequestResponseClientOptions::WithMaxStreamingSubscriptions
RequestResponseClientOptions & WithMaxStreamingSubscriptions(uint32_t maxStreamingSubscriptions)
Definition: MqttRequestResponseClient.h:452
Aws::Iot::RequestResponse::Result::Result
Result(const R &response)
Definition: MqttRequestResponseClient.h:259
Aws::Iot::RequestResponse::UnmodeledResponse::WithPayload
UnmodeledResponse & WithPayload(Aws::Crt::ByteCursor payload)
Definition: MqttRequestResponseClient.h:203
Aws::Iot::RequestResponse::IStreamingOperation::Open
virtual void Open()=0
Aws::Iot::RequestResponse::UnmodeledResponse::GetPayload
Aws::Crt::ByteCursor GetPayload() const
Definition: MqttRequestResponseClient.h:226
Aws::Iot::RequestResponse::IncomingPublishEvent::WithTopic
IncomingPublishEvent & WithTopic(Aws::Crt::ByteCursor topic)
Definition: MqttRequestResponseClient.h:136
Aws::Iot::RequestResponse::UnmodeledResponse::GetTopic
Aws::Crt::ByteCursor GetTopic() const
Definition: MqttRequestResponseClient.h:233
Aws::Iot::RequestResponse::StreamingOperationOptions::GetStreamHandler
const std::function< void(T &&)> & GetStreamHandler() const
Definition: MqttRequestResponseClient.h:372