AWS IoT Device SDK C++ v2 1.44.2
AWS IoT Device SDK C++ v2
Loading...
Searching...
No Matches
Mqtt5Client.h
Go to the documentation of this file.
1#pragma once
9
10namespace Aws
11{
12 namespace Crt
13 {
14 namespace Mqtt
15 {
16 struct IoTDeviceSDKMetrics;
17 }
18 namespace Mqtt5
19 {
20 class ConnectPacket;
21 class ConnAckPacket;
22 class DisconnectPacket;
23 class Mqtt5Client;
26 class PublishResult;
27 class PublishPacket;
28 class PubAckPacket;
29 class SubscribePacket;
30 class SubAckPacket;
32 class UnSubAckPacket;
33 class Mqtt5ClientCore;
34
35 class Mqtt5to3AdapterOptions;
36
37 struct PublishAcknowledgementHandle;
38
46 {
47
52 Default = AWS_MQTT5_COTABT_DEFAULT,
53
62 Manual = AWS_MQTT5_COTABT_MANUAL,
63
68 LRU = AWS_MQTT5_COTABT_LRU,
69
73 Disabled = AWS_MQTT5_COTABT_DISABLED,
74 };
75
84 {
85
90 Default = AWS_MQTT5_CITABT_DEFAULT,
91
95 Enabled = AWS_MQTT5_CITABT_ENABLED,
96
100 Disabled = AWS_MQTT5_CITABT_DISABLED,
101 };
102
149
177
207
216
221 {
222 OnConnectionFailureEventData() : errorCode(AWS_ERROR_SUCCESS), connAckPacket(nullptr) {}
223
225 std::shared_ptr<ConnAckPacket> connAckPacket;
226 };
227
232 {
234
235 std::shared_ptr<ConnAckPacket> connAckPacket;
236 std::shared_ptr<NegotiatedSettings> negotiatedSettings;
237 };
238
243 {
244 OnDisconnectionEventData() : errorCode(AWS_ERROR_SUCCESS), disconnectPacket(nullptr) {}
245
247 std::shared_ptr<DisconnectPacket> disconnectPacket;
248 };
249
258
263 {
265
266 std::shared_ptr<PublishPacket> publishPacket;
267
280 std::function<ScopedResource<PublishAcknowledgementHandle>()> acquirePublishAcknowledgement;
281 };
282
287 using OnConnectionSuccessHandler = std::function<void(const OnConnectionSuccessEventData &)>;
288
292 using OnConnectionFailureHandler = std::function<void(const OnConnectionFailureEventData &)>;
293
297 using OnDisconnectionHandler = std::function<void(const OnDisconnectionEventData &)>;
298
303 using OnAttemptingConnectHandler = std::function<void(const OnAttemptingConnectEventData &)>;
304
309 using OnStoppedHandler = std::function<void(const OnStoppedEventData &)>;
310
314 using OnPublishCompletionHandler = std::function<void(int, std::shared_ptr<PublishResult>)>;
315
319 using OnSubscribeCompletionHandler = std::function<void(int, std::shared_ptr<SubAckPacket>)>;
320
324 using OnUnsubscribeCompletionHandler = std::function<void(int, std::shared_ptr<UnSubAckPacket>)>;
325
337 using OnPublishReceivedHandler = std::function<void(const PublishReceivedEventData &)>;
338
344 std::function<void(const std::shared_ptr<Http::HttpRequest> &, int)>;
345
353 std::function<void(std::shared_ptr<Http::HttpRequest>, const OnWebSocketHandshakeInterceptComplete &)>;
354
360 class AWS_CRT_CPP_API Mqtt5Client final : public std::enable_shared_from_this<Mqtt5Client>
361 {
363
364 public:
372 static std::shared_ptr<Mqtt5Client> NewMqtt5Client(
373 const Mqtt5ClientOptions &options,
374 Allocator *allocator = ApiAllocator()) noexcept;
375
382 std::shared_ptr<Mqtt5Client> getptr() { return shared_from_this(); }
383
387 operator bool() const noexcept;
388
392 int LastError() const noexcept;
393
401 bool Start() const noexcept;
402
409 bool Stop() noexcept;
410
420 bool Stop(std::shared_ptr<DisconnectPacket> disconnectPacket) noexcept;
421
430 bool Publish(
431 std::shared_ptr<PublishPacket> publishPacket,
432 OnPublishCompletionHandler onPublishCompletionCallback = NULL) noexcept;
433
442 bool Subscribe(
443 std::shared_ptr<SubscribePacket> subscribePacket,
444 OnSubscribeCompletionHandler onSubscribeCompletionCallback = NULL) noexcept;
445
454 bool Unsubscribe(
455 std::shared_ptr<UnsubscribePacket> unsubscribePacket,
456 OnUnsubscribeCompletionHandler onUnsubscribeCompletionCallback = NULL) noexcept;
457
463 const Mqtt5ClientOperationStatistics &GetOperationStatistics() noexcept;
464
476 bool InvokePublishAcknowledgement(
477 const PublishAcknowledgementHandle &publishAcknowledgementHandle) noexcept;
478
479 ~Mqtt5Client();
480
481 struct aws_mqtt5_client *GetUnderlyingHandle() const noexcept;
482
483 private:
484 Mqtt5Client(const Mqtt5ClientOptions &options, Allocator *allocator = ApiAllocator()) noexcept;
485
486 /* The client core to handle the user callbacks and c client termination */
487 std::shared_ptr<Mqtt5ClientCore> m_client_core;
488
489 Mqtt5ClientOperationStatistics m_operationStatistics;
490 };
491
496 {
497 friend class Mqtt5ClientCore;
499
500 public:
504 Mqtt5ClientOptions(Crt::Allocator *allocator = ApiAllocator()) noexcept;
505
514
522 Mqtt5ClientOptions &WithPort(uint32_t port) noexcept;
523
532 Mqtt5ClientOptions &WithBootstrap(Io::ClientBootstrap *bootStrap) noexcept;
533
541 Mqtt5ClientOptions &WithSocketOptions(Io::SocketOptions socketOptions) noexcept;
542
550 Mqtt5ClientOptions &WithTlsConnectionOptions(const Io::TlsConnectionOptions &tslOptions) noexcept;
551
560 const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
561
569 Mqtt5ClientOptions &WithConnectOptions(std::shared_ptr<ConnectPacket> connectPacket) noexcept;
570
579
590 ClientExtendedValidationAndFlowControl clientExtendedValidationAndFlowControl) noexcept;
591
603 ClientOperationQueueBehaviorType offlineQueueBehavior) noexcept;
604
613 Mqtt5ClientOptions &WithReconnectOptions(ReconnectOptions reconnectOptions) noexcept;
614
622
631 Mqtt5ClientOptions &WithPingTimeoutMs(uint32_t pingTimeoutMs) noexcept;
632
641 Mqtt5ClientOptions &WithConnackTimeoutMs(uint32_t connackTimeoutMs) noexcept;
642
653 Mqtt5ClientOptions &WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept;
654
663 Mqtt5ClientOptions &WithAckTimeoutSec(uint32_t ackTimeoutSec) noexcept;
664
677 OnWebSocketHandshakeIntercept callback) noexcept;
678
687
696
705
714
723
732
739 Mqtt5ClientOptions &WithMetricsCollection(bool enabled) noexcept;
740
748 bool initializeRawOptions(aws_mqtt5_client_options &raw_options) const noexcept;
749
753 Mqtt5ClientOptions &operator=(const Mqtt5ClientOptions &) = delete;
754 Mqtt5ClientOptions &operator=(Mqtt5ClientOptions &&) = delete;
755
756 private:
763 OnWebSocketHandshakeIntercept websocketHandshakeTransform;
764
768 OnConnectionSuccessHandler onConnectionSuccess;
769
773 OnConnectionFailureHandler onConnectionFailure;
774
778 OnDisconnectionHandler onDisconnection;
779
785 OnStoppedHandler onStopped;
786
792 OnAttemptingConnectHandler onAttemptingConnect;
793
800 OnPublishReceivedHandler onPublishReceived;
801
805 Crt::String m_hostName;
806
810 uint32_t m_port;
811
815 Io::ClientBootstrap *m_bootstrap;
816
821 Crt::Io::SocketOptions m_socketOptions;
822
827 Crt::Optional<Crt::Io::TlsConnectionOptions> m_tlsConnectionOptions;
828
832 Crt::Optional<Crt::Http::HttpClientConnectionProxyOptions> m_proxyOptions;
833
838 std::shared_ptr<ConnectPacket> m_connectOptions;
839
843 ClientSessionBehaviorType m_sessionBehavior;
844
849 ClientExtendedValidationAndFlowControl m_extendedValidationAndFlowControlOptions;
850
857 ClientOperationQueueBehaviorType m_offlineQueueBehavior;
858
862 ReconnectOptions m_reconnectionOptions;
863
867 aws_mqtt5_client_topic_alias_options m_topicAliasingOptions;
868
873 uint32_t m_pingTimeoutMs;
874
879 uint32_t m_connackTimeoutMs;
880
885 uint32_t m_ackTimeoutSec;
886
887 bool m_enableMetrics = true;
888 Crt::ScopedResource<Mqtt::IoTDeviceSDKMetrics> m_sdkMetrics;
889
890 /* Underlying Parameters */
891 Crt::Allocator *m_allocator;
892 aws_http_proxy_options m_httpProxyOptionsStorage;
893 aws_mqtt5_packet_connect_view m_packetConnectViewStorage;
894 struct aws_mqtt_iot_metrics m_metricsStorage;
895 };
896
897 } // namespace Mqtt5
898 } // namespace Crt
899} // namespace Aws
Definition Mqtt5Packets.h:1180
Definition Mqtt5Packets.h:672
Definition Mqtt5Packets.h:1560
Definition Mqtt5Client.h:361
std::shared_ptr< Mqtt5Client > getptr()
Definition Mqtt5Client.h:382
static std::shared_ptr< Mqtt5Client > NewMqtt5Client(const Mqtt5ClientOptions &options, Allocator *allocator=ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:40
Definition Mqtt5Client.h:496
Mqtt5ClientOptions & WithHostName(Crt::String hostname)
Definition Mqtt5Client.cpp:269
Mqtt5ClientOptions & WithPublishReceivedCallback(OnPublishReceivedHandler callback) noexcept
Definition Mqtt5Client.cpp:432
Mqtt5ClientOptions & WithClientDisconnectionCallback(OnDisconnectionHandler callback) noexcept
Definition Mqtt5Client.cpp:412
Mqtt5ClientOptions & WithClientStoppedCallback(OnStoppedHandler callback) noexcept
Definition Mqtt5Client.cpp:419
Mqtt5ClientOptions & WithTlsConnectionOptions(const Io::TlsConnectionOptions &tslOptions) noexcept
Definition Mqtt5Client.cpp:293
Mqtt5ClientOptions & WithReconnectOptions(ReconnectOptions reconnectOptions) noexcept
Definition Mqtt5Client.cpp:337
Mqtt5ClientOptions & WithHttpProxyOptions(const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept
Definition Mqtt5Client.cpp:300
friend class Mqtt5ClientCore
Definition Mqtt5Client.h:497
Mqtt5ClientOptions & WithMetricsCollection(bool enabled) noexcept
Definition Mqtt5Client.cpp:439
Mqtt5ClientOptions & WithSessionBehavior(ClientSessionBehaviorType sessionBehavior) noexcept
Definition Mqtt5Client.cpp:316
Mqtt5ClientOptions & WithBootstrap(Io::ClientBootstrap *bootStrap) noexcept
Definition Mqtt5Client.cpp:281
Mqtt5ClientOptions & WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept
Definition Mqtt5Client.cpp:380
Mqtt5ClientOptions & WithSocketOptions(Io::SocketOptions socketOptions) noexcept
Definition Mqtt5Client.cpp:287
Mqtt5ClientOptions & WithPingTimeoutMs(uint32_t pingTimeoutMs) noexcept
Definition Mqtt5Client.cpp:368
Mqtt5ClientOptions & WithClientAttemptingConnectCallback(OnAttemptingConnectHandler callback) noexcept
Definition Mqtt5Client.cpp:425
Mqtt5ClientOptions & WithConnectOptions(std::shared_ptr< ConnectPacket > connectPacket) noexcept
Definition Mqtt5Client.cpp:308
Mqtt5ClientOptions & WithPort(uint32_t port) noexcept
Definition Mqtt5Client.cpp:275
Mqtt5ClientOptions & WithClientConnectionFailureCallback(OnConnectionFailureHandler callback) noexcept
Definition Mqtt5Client.cpp:405
Mqtt5ClientOptions & WithClientExtendedValidationAndFlowControl(ClientExtendedValidationAndFlowControl clientExtendedValidationAndFlowControl) noexcept
Definition Mqtt5Client.cpp:323
Mqtt5ClientOptions & WithAckTimeoutSec(uint32_t ackTimeoutSec) noexcept
Definition Mqtt5Client.cpp:385
friend class Mqtt5to3AdapterOptions
Definition Mqtt5Client.h:498
Mqtt5ClientOptions(Crt::Allocator *allocator=ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:204
Mqtt5ClientOptions & WithTopicAliasingOptions(TopicAliasingOptions topicAliasingOptions) noexcept
Definition Mqtt5Client.cpp:343
Mqtt5ClientOptions & WithWebsocketHandshakeTransformCallback(OnWebSocketHandshakeIntercept callback) noexcept
Definition Mqtt5Client.cpp:391
Mqtt5ClientOptions & WithConnackTimeoutMs(uint32_t connackTimeoutMs) noexcept
Definition Mqtt5Client.cpp:374
Mqtt5ClientOptions & WithClientConnectionSuccessCallback(OnConnectionSuccessHandler callback) noexcept
Definition Mqtt5Client.cpp:398
Mqtt5ClientOptions & WithOfflineQueueBehavior(ClientOperationQueueBehaviorType offlineQueueBehavior) noexcept
Definition Mqtt5Client.cpp:330
bool initializeRawOptions(aws_mqtt5_client_options &raw_options) const noexcept
Definition Mqtt5Client.cpp:223
Definition Mqtt5Packets.h:488
Definition Mqtt5Packets.h:1776
Definition Mqtt5Packets.h:53
Definition Mqtt5Packets.h:1853
Definition Mqtt5Packets.h:2165
Definition Mqtt5Packets.h:2038
Definition Mqtt5Packets.h:2341
Definition Mqtt5Packets.h:2244
Definition MqttConnection.h:158
Definition Optional.h:19
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Credentials.h:28
Definition Credentials.h:23
Definition HttpRequestResponse.h:24
std::function< void(int, std::shared_ptr< PublishResult >)> OnPublishCompletionHandler
Definition Mqtt5Client.h:314
std::function< void(int, std::shared_ptr< SubAckPacket >)> OnSubscribeCompletionHandler
Definition Mqtt5Client.h:319
aws_exponential_backoff_jitter_mode ExponentialBackoffJitterMode
Definition Mqtt5Types.h:242
InboundTopicAliasBehaviorType
Definition Mqtt5Client.h:84
aws_mqtt5_client_session_behavior_type ClientSessionBehaviorType
Definition Mqtt5Types.h:186
aws_mqtt5_extended_validation_and_flow_control_options ClientExtendedValidationAndFlowControl
Definition Mqtt5Types.h:200
std::function< void(const OnConnectionSuccessEventData &)> OnConnectionSuccessHandler
Definition Mqtt5Client.h:287
std::function< void(const OnConnectionFailureEventData &)> OnConnectionFailureHandler
Definition Mqtt5Client.h:292
OutboundTopicAliasBehaviorType
Definition Mqtt5Client.h:46
std::function< void(const std::shared_ptr< Http::HttpRequest > &, int)> OnWebSocketHandshakeInterceptComplete
Definition Mqtt5Client.h:343
std::function< void(const OnDisconnectionEventData &)> OnDisconnectionHandler
Definition Mqtt5Client.h:297
std::function< void(const OnAttemptingConnectEventData &)> OnAttemptingConnectHandler
Definition Mqtt5Client.h:303
std::function< void(std::shared_ptr< Http::HttpRequest >, const OnWebSocketHandshakeInterceptComplete &)> OnWebSocketHandshakeIntercept
Definition Mqtt5Client.h:352
aws_mqtt5_client_operation_queue_behavior_type ClientOperationQueueBehaviorType
Definition Mqtt5Types.h:223
std::function< void(int, std::shared_ptr< UnSubAckPacket >)> OnUnsubscribeCompletionHandler
Definition Mqtt5Client.h:324
std::function< void(const PublishReceivedEventData &)> OnPublishReceivedHandler
Definition Mqtt5Client.h:337
std::function< void(const OnStoppedEventData &)> OnStoppedHandler
Definition Mqtt5Client.h:309
Definition HttpRequestResponse.h:19
Definition Allocator.h:13
std::unique_ptr< T, std::function< void(T *)> > ScopedResource
Definition Types.h:163
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > String
Definition Types.h:45
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition Allocator.cpp:24
aws_allocator Allocator
Definition Allocator.h:14
AWS_CRT_CPP_API int LastError() noexcept
Definition Api.cpp:464
Definition Allocator.h:11
Definition StringView.h:862
uint64_t unackedOperationCount
Definition Mqtt5Client.h:199
uint64_t incompleteOperationSize
Definition Mqtt5Client.h:193
uint64_t incompleteOperationCount
Definition Mqtt5Client.h:187
uint64_t unackedOperationSize
Definition Mqtt5Client.h:205
OnAttemptingConnectEventData()
Definition Mqtt5Client.h:214
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:225
int errorCode
Definition Mqtt5Client.h:224
OnConnectionFailureEventData()
Definition Mqtt5Client.h:222
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:235
OnConnectionSuccessEventData()
Definition Mqtt5Client.h:233
std::shared_ptr< NegotiatedSettings > negotiatedSettings
Definition Mqtt5Client.h:236
Definition Mqtt5Client.h:243
int errorCode
Definition Mqtt5Client.h:246
std::shared_ptr< DisconnectPacket > disconnectPacket
Definition Mqtt5Client.h:247
OnDisconnectionEventData()
Definition Mqtt5Client.h:244
Definition Mqtt5Client.h:255
OnStoppedEventData()
Definition Mqtt5Client.h:256
Definition Mqtt5Client.h:263
std::function< ScopedResource< PublishAcknowledgementHandle >()> acquirePublishAcknowledgement
Definition Mqtt5Client.h:280
std::shared_ptr< PublishPacket > publishPacket
Definition Mqtt5Client.h:266
PublishReceivedEventData()
Definition Mqtt5Client.h:264
Definition Mqtt5Client.h:151
uint64_t m_minReconnectDelayMs
Definition Mqtt5Client.h:162
uint64_t m_minConnectedTimeToResetReconnectDelayMs
Definition Mqtt5Client.h:175
uint64_t m_maxReconnectDelayMs
Definition Mqtt5Client.h:168
ExponentialBackoffJitterMode m_reconnectMode
Definition Mqtt5Client.h:156
Definition Mqtt5Client.h:107
Crt::Optional< InboundTopicAliasBehaviorType > m_inboundBehavior
Definition Mqtt5Client.h:137
Crt::Optional< OutboundTopicAliasBehaviorType > m_outboundBehavior
Definition Mqtt5Client.h:117
Crt::Optional< uint16_t > m_outboundCacheMaxSize
Definition Mqtt5Client.h:129
Crt::Optional< uint16_t > m_inboundCacheMaxSize
Definition Mqtt5Client.h:147