aws-crt-cpp
C++ wrapper around the aws-c-* libraries. Provides Cross-Platform Transport Protocols and SSL/TLS implementations for C++.
Loading...
Searching...
No Matches
MqttRequestResponseClient.h
Go to the documentation of this file.
1#pragma once
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
18namespace 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
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
528 {
529 m_maxStreamingSubscriptions = maxStreamingSubscriptions;
530 return *this;
531 }
532
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
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Mqtt5Client.h:332
Definition MqttConnection.h:158
Definition MqttRequestResponseClient.h:591
virtual int SubmitRequest(const aws_mqtt_request_operation_options &requestOptions, UnmodeledResultHandler &&resultHandler)=0
virtual std::shared_ptr< IStreamingOperation > CreateStream(const StreamingOperationOptionsInternal &options)=0
Definition MqttRequestResponseClient.h:481
Definition MqttRequestResponseClient.h:134
IncomingPublishEvent & WithContentType(Aws::Crt::ByteCursor contentType)
Definition MqttRequestResponseClient.h:175
IncomingPublishEvent()
Definition MqttRequestResponseClient.h:139
const Aws::Crt::Optional< Aws::Crt::Vector< UserPropertyView > > & GetUserProperties() const
Definition MqttRequestResponseClient.h:230
IncomingPublishEvent & WithUserProperties(Aws::Crt::Vector< UserPropertyView > userProperties)
Definition MqttRequestResponseClient.h:187
const Aws::Crt::Optional< uint32_t > & GetMessageExpiryIntervalSeconds() const
Definition MqttRequestResponseClient.h:235
IncomingPublishEvent & WithPayload(Aws::Crt::ByteCursor payload)
Definition MqttRequestResponseClient.h:163
Aws::Crt::ByteCursor GetPayload() const
Definition MqttRequestResponseClient.h:217
IncomingPublishEvent & WithMessageExpiryIntervalSeconds(uint32_t messageExpiryIntervalSeconds)
Definition MqttRequestResponseClient.h:199
const Aws::Crt::Optional< Aws::Crt::ByteCursor > & GetContentType() const
Definition MqttRequestResponseClient.h:224
IncomingPublishEvent & WithTopic(Aws::Crt::ByteCursor topic)
Definition MqttRequestResponseClient.h:151
Aws::Crt::ByteCursor GetTopic() const
Definition MqttRequestResponseClient.h:210
Definition MqttRequestResponseClient.h:499
RequestResponseClientOptions & WithMaxRequestResponseSubscriptions(uint32_t maxRequestResponseSubscriptions)
Definition MqttRequestResponseClient.h:511
uint32_t GetOperationTimeoutInSeconds() const
Definition MqttRequestResponseClient.h:568
RequestResponseClientOptions & WithOperationTimeoutInSeconds(uint32_t operationTimeoutInSeconds)
Definition MqttRequestResponseClient.h:541
RequestResponseClientOptions & WithMaxStreamingSubscriptions(uint32_t maxStreamingSubscriptions)
Definition MqttRequestResponseClient.h:527
uint32_t GetMaxStreamingSubscriptions() const
Definition MqttRequestResponseClient.h:561
uint32_t GetMaxRequestResponseSubscriptions() const
Definition MqttRequestResponseClient.h:554
Definition MqttRequestResponseClient.h:330
Result(E &&error)
Definition MqttRequestResponseClient.h:337
Result & operator=(E &&error)
Definition MqttRequestResponseClient.h:359
const R & GetResponse() const
Definition MqttRequestResponseClient.h:368
Result(const R &response)
Definition MqttRequestResponseClient.h:334
Result & operator=(const E &error)
Definition MqttRequestResponseClient.h:353
Result & operator=(const R &response)
Definition MqttRequestResponseClient.h:339
Result(const E &error)
Definition MqttRequestResponseClient.h:336
Result(R &&response)
Definition MqttRequestResponseClient.h:335
const E & GetError() const
Definition MqttRequestResponseClient.h:375
bool IsSuccess() const
Definition MqttRequestResponseClient.h:366
Result & operator=(R &&response)
Definition MqttRequestResponseClient.h:346
Definition MqttRequestResponseClient.h:405
StreamingOperationOptions & WithSubscriptionStatusEventHandler(const SubscriptionStatusEventHandler &handler)
Definition MqttRequestResponseClient.h:413
const SubscriptionStatusEventHandler & GetSubscriptionStatusEventHandler() const
Definition MqttRequestResponseClient.h:437
StreamingOperationOptions & WithStreamHandler(const std::function< void(T &&)> &handler)
Definition MqttRequestResponseClient.h:426
const std::function< void(T &&)> & GetStreamHandler() const
Definition MqttRequestResponseClient.h:447
Definition MqttRequestResponseClient.h:66
SubscriptionStatusEventType GetType() const
Definition MqttRequestResponseClient.h:96
SubscriptionStatusEvent & WithErrorCode(int errorCode)
Definition MqttRequestResponseClient.h:86
int GetErrorCode() const
Definition MqttRequestResponseClient.h:102
SubscriptionStatusEvent & WithType(SubscriptionStatusEventType type)
Definition MqttRequestResponseClient.h:74
Definition MqttRequestResponseClient.h:261
Aws::Crt::ByteCursor GetPayload() const
Definition MqttRequestResponseClient.h:301
UnmodeledResponse()
Definition MqttRequestResponseClient.h:266
UnmodeledResponse & WithTopic(Aws::Crt::ByteCursor topic)
Definition MqttRequestResponseClient.h:290
UnmodeledResponse & WithPayload(Aws::Crt::ByteCursor payload)
Definition MqttRequestResponseClient.h:278
Aws::Crt::ByteCursor GetTopic() const
Definition MqttRequestResponseClient.h:308
aws_byte_cursor ByteCursor
Definition Types.h:31
aws_allocator Allocator
Definition Allocator.h:14
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition Allocator.cpp:24
std::unique_ptr< T, std::function< void(T *)> > ScopedResource
Definition Types.h:163
SubscriptionStatusEventType
Definition MqttRequestResponseClient.h:42
std::function< void(IncomingPublishEvent &&)> IncomingPublishEventHandler
Definition MqttRequestResponseClient.h:253
std::function< void(UnmodeledResult &&)> UnmodeledResultHandler
Definition MqttRequestResponseClient.h:397
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_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
std::function< void(SubscriptionStatusEvent &&)> SubscriptionStatusEventHandler
Definition MqttRequestResponseClient.h:112
Definition Allocator.h:11
Definition StringView.h:862
Definition MqttRequestResponseClient.h:462
SubscriptionStatusEventHandler subscriptionStatusEventHandler
Definition MqttRequestResponseClient.h:472
StreamingOperationOptionsInternal()
Definition MqttRequestResponseClient.h:464
IncomingPublishEventHandler incomingPublishEventHandler
Definition MqttRequestResponseClient.h:474
Aws::Crt::ByteCursor subscriptionTopicFilter
Definition MqttRequestResponseClient.h:470
Definition MqttRequestResponseClient.h:120
UserPropertyView(Aws::Crt::ByteCursor name, Aws::Crt::ByteCursor value)
Definition MqttRequestResponseClient.h:121
Aws::Crt::ByteCursor m_value
Definition MqttRequestResponseClient.h:125
Aws::Crt::ByteCursor m_name
Definition MqttRequestResponseClient.h:124