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>
13#include <aws/mqtt/request-response/request_response_client.h>
14
15#include <functional>
16
17namespace 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
453 {
454 m_maxStreamingSubscriptions = maxStreamingSubscriptions;
455 return *this;
456 }
457
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
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Mqtt5Client.h:332
Definition MqttConnection.h:158
Definition MqttRequestResponseClient.h:516
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:406
Definition MqttRequestResponseClient.h:119
IncomingPublishEvent()
Definition MqttRequestResponseClient.h:124
IncomingPublishEvent & WithPayload(Aws::Crt::ByteCursor payload)
Definition MqttRequestResponseClient.h:148
Aws::Crt::ByteCursor GetPayload() const
Definition MqttRequestResponseClient.h:166
IncomingPublishEvent & WithTopic(Aws::Crt::ByteCursor topic)
Definition MqttRequestResponseClient.h:136
Aws::Crt::ByteCursor GetTopic() const
Definition MqttRequestResponseClient.h:159
Definition MqttRequestResponseClient.h:424
RequestResponseClientOptions & WithMaxRequestResponseSubscriptions(uint32_t maxRequestResponseSubscriptions)
Definition MqttRequestResponseClient.h:436
uint32_t GetOperationTimeoutInSeconds() const
Definition MqttRequestResponseClient.h:493
RequestResponseClientOptions & WithOperationTimeoutInSeconds(uint32_t operationTimeoutInSeconds)
Definition MqttRequestResponseClient.h:466
RequestResponseClientOptions & WithMaxStreamingSubscriptions(uint32_t maxStreamingSubscriptions)
Definition MqttRequestResponseClient.h:452
uint32_t GetMaxStreamingSubscriptions() const
Definition MqttRequestResponseClient.h:486
uint32_t GetMaxRequestResponseSubscriptions() const
Definition MqttRequestResponseClient.h:479
Definition MqttRequestResponseClient.h:255
Result(E &&error)
Definition MqttRequestResponseClient.h:262
Result & operator=(E &&error)
Definition MqttRequestResponseClient.h:284
const R & GetResponse() const
Definition MqttRequestResponseClient.h:293
Result(const R &response)
Definition MqttRequestResponseClient.h:259
Result & operator=(const E &error)
Definition MqttRequestResponseClient.h:278
Result & operator=(const R &response)
Definition MqttRequestResponseClient.h:264
Result(const E &error)
Definition MqttRequestResponseClient.h:261
Result(R &&response)
Definition MqttRequestResponseClient.h:260
const E & GetError() const
Definition MqttRequestResponseClient.h:300
bool IsSuccess() const
Definition MqttRequestResponseClient.h:291
Result & operator=(R &&response)
Definition MqttRequestResponseClient.h:271
Definition MqttRequestResponseClient.h:330
StreamingOperationOptions & WithSubscriptionStatusEventHandler(const SubscriptionStatusEventHandler &handler)
Definition MqttRequestResponseClient.h:338
const SubscriptionStatusEventHandler & GetSubscriptionStatusEventHandler() const
Definition MqttRequestResponseClient.h:362
StreamingOperationOptions & WithStreamHandler(const std::function< void(T &&)> &handler)
Definition MqttRequestResponseClient.h:351
const std::function< void(T &&)> & GetStreamHandler() const
Definition MqttRequestResponseClient.h:372
Definition MqttRequestResponseClient.h:65
SubscriptionStatusEventType GetType() const
Definition MqttRequestResponseClient.h:95
SubscriptionStatusEvent & WithErrorCode(int errorCode)
Definition MqttRequestResponseClient.h:85
int GetErrorCode() const
Definition MqttRequestResponseClient.h:101
SubscriptionStatusEvent & WithType(SubscriptionStatusEventType type)
Definition MqttRequestResponseClient.h:73
Definition MqttRequestResponseClient.h:186
Aws::Crt::ByteCursor GetPayload() const
Definition MqttRequestResponseClient.h:226
UnmodeledResponse()
Definition MqttRequestResponseClient.h:191
UnmodeledResponse & WithTopic(Aws::Crt::ByteCursor topic)
Definition MqttRequestResponseClient.h:215
UnmodeledResponse & WithPayload(Aws::Crt::ByteCursor payload)
Definition MqttRequestResponseClient.h:203
Aws::Crt::ByteCursor GetTopic() const
Definition MqttRequestResponseClient.h:233
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:41
std::function< void(IncomingPublishEvent &&)> IncomingPublishEventHandler
Definition MqttRequestResponseClient.h:178
std::function< void(UnmodeledResult &&)> UnmodeledResultHandler
Definition MqttRequestResponseClient.h:322
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_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
std::function< void(SubscriptionStatusEvent &&)> SubscriptionStatusEventHandler
Definition MqttRequestResponseClient.h:111
Definition Allocator.h:11
Definition StringView.h:862
Definition MqttRequestResponseClient.h:387
SubscriptionStatusEventHandler subscriptionStatusEventHandler
Definition MqttRequestResponseClient.h:397
StreamingOperationOptionsInternal()
Definition MqttRequestResponseClient.h:389
IncomingPublishEventHandler incomingPublishEventHandler
Definition MqttRequestResponseClient.h:399
Aws::Crt::ByteCursor subscriptionTopicFilter
Definition MqttRequestResponseClient.h:395