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
Mqtt5Client.h
Go to the documentation of this file.
1#pragma once
10
11namespace Aws
12{
13 namespace Crt
14 {
15 namespace Mqtt5
16 {
17 class ConnectPacket;
18 class ConnAckPacket;
19 class DisconnectPacket;
20 class Mqtt5Client;
21 class Mqtt5ClientOptions;
22 class NegotiatedSettings;
23 class PublishResult;
24 class PublishPacket;
25 class PubAckPacket;
26 class SubscribePacket;
27 class SubAckPacket;
28 class UnsubscribePacket;
29 class UnSubAckPacket;
30 class Mqtt5ClientCore;
31
32 class Mqtt5to3AdapterOptions;
33
41 {
42
47 Default = AWS_MQTT5_COTABT_DEFAULT,
48
57 Manual = AWS_MQTT5_COTABT_MANUAL,
58
63 LRU = AWS_MQTT5_COTABT_LRU,
64
68 Disabled = AWS_MQTT5_COTABT_DISABLED,
69 };
70
79 {
80
85 Default = AWS_MQTT5_CITABT_DEFAULT,
86
90 Enabled = AWS_MQTT5_CITABT_ENABLED,
91
95 Disabled = AWS_MQTT5_CITABT_DISABLED,
96 };
97
144
172
202
211
216 {
217 OnConnectionFailureEventData() : errorCode(AWS_ERROR_SUCCESS), connAckPacket(nullptr) {}
218
220 std::shared_ptr<ConnAckPacket> connAckPacket;
221 };
222
227 {
228 OnConnectionSuccessEventData() : connAckPacket(nullptr), negotiatedSettings(nullptr) {}
229
230 std::shared_ptr<ConnAckPacket> connAckPacket;
231 std::shared_ptr<NegotiatedSettings> negotiatedSettings;
232 };
233
238 {
239 OnDisconnectionEventData() : errorCode(AWS_ERROR_SUCCESS), disconnectPacket(nullptr) {}
240
242 std::shared_ptr<DisconnectPacket> disconnectPacket;
243 };
244
253
258 {
259 PublishReceivedEventData() : publishPacket(nullptr) {}
260 std::shared_ptr<PublishPacket> publishPacket;
261 };
262
267 using OnConnectionSuccessHandler = std::function<void(const OnConnectionSuccessEventData &)>;
268
272 using OnConnectionFailureHandler = std::function<void(const OnConnectionFailureEventData &)>;
273
277 using OnDisconnectionHandler = std::function<void(const OnDisconnectionEventData &)>;
278
283 using OnAttemptingConnectHandler = std::function<void(const OnAttemptingConnectEventData &)>;
284
289 using OnStoppedHandler = std::function<void(const OnStoppedEventData &)>;
290
294 using OnPublishCompletionHandler = std::function<void(int, std::shared_ptr<PublishResult>)>;
295
299 using OnSubscribeCompletionHandler = std::function<void(int, std::shared_ptr<SubAckPacket>)>;
300
304 using OnUnsubscribeCompletionHandler = std::function<void(int, std::shared_ptr<UnSubAckPacket>)>;
305
309 using OnPublishReceivedHandler = std::function<void(const PublishReceivedEventData &)>;
310
316 std::function<void(const std::shared_ptr<Http::HttpRequest> &, int)>;
317
325 std::function<void(std::shared_ptr<Http::HttpRequest>, const OnWebSocketHandshakeInterceptComplete &)>;
326
332 class AWS_CRT_CPP_API Mqtt5Client final : public std::enable_shared_from_this<Mqtt5Client>
333 {
335
336 public:
344 static std::shared_ptr<Mqtt5Client> NewMqtt5Client(
345 const Mqtt5ClientOptions &options,
346 Allocator *allocator = ApiAllocator()) noexcept;
347
354 std::shared_ptr<Mqtt5Client> getptr() { return shared_from_this(); }
355
359 operator bool() const noexcept;
360
364 int LastError() const noexcept;
365
373 bool Start() const noexcept;
374
381 bool Stop() noexcept;
382
392 bool Stop(std::shared_ptr<DisconnectPacket> disconnectPacket) noexcept;
393
402 bool Publish(
403 std::shared_ptr<PublishPacket> publishPacket,
404 OnPublishCompletionHandler onPublishCompletionCallback = NULL) noexcept;
405
414 bool Subscribe(
415 std::shared_ptr<SubscribePacket> subscribePacket,
416 OnSubscribeCompletionHandler onSubscribeCompletionCallback = NULL) noexcept;
417
426 bool Unsubscribe(
427 std::shared_ptr<UnsubscribePacket> unsubscribePacket,
428 OnUnsubscribeCompletionHandler onUnsubscribeCompletionCallback = NULL) noexcept;
429
435 const Mqtt5ClientOperationStatistics &GetOperationStatistics() noexcept;
436
437 ~Mqtt5Client();
438
439 struct aws_mqtt5_client *GetUnderlyingHandle() const noexcept;
440
441 private:
442 Mqtt5Client(const Mqtt5ClientOptions &options, Allocator *allocator = ApiAllocator()) noexcept;
443
444 /* The client core to handle the user callbacks and c client termination */
445 std::shared_ptr<Mqtt5ClientCore> m_client_core;
446
447 Mqtt5ClientOperationStatistics m_operationStatistics;
448 };
449
454 {
455 friend class Mqtt5ClientCore;
456 friend class Mqtt5to3AdapterOptions;
457
458 public:
462 Mqtt5ClientOptions(Crt::Allocator *allocator = ApiAllocator()) noexcept;
463
471 Mqtt5ClientOptions &WithHostName(Crt::String hostname);
472
480 Mqtt5ClientOptions &WithPort(uint32_t port) noexcept;
481
490 Mqtt5ClientOptions &WithBootstrap(Io::ClientBootstrap *bootStrap) noexcept;
491
499 Mqtt5ClientOptions &WithSocketOptions(Io::SocketOptions socketOptions) noexcept;
500
508 Mqtt5ClientOptions &WithTlsConnectionOptions(const Io::TlsConnectionOptions &tslOptions) noexcept;
509
517 Mqtt5ClientOptions &WithHttpProxyOptions(
518 const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
519
527 Mqtt5ClientOptions &WithConnectOptions(std::shared_ptr<ConnectPacket> connectPacket) noexcept;
528
536 Mqtt5ClientOptions &WithSessionBehavior(ClientSessionBehaviorType sessionBehavior) noexcept;
537
547 Mqtt5ClientOptions &WithClientExtendedValidationAndFlowControl(
548 ClientExtendedValidationAndFlowControl clientExtendedValidationAndFlowControl) noexcept;
549
560 Mqtt5ClientOptions &WithOfflineQueueBehavior(
561 ClientOperationQueueBehaviorType offlineQueueBehavior) noexcept;
562
571 Mqtt5ClientOptions &WithReconnectOptions(ReconnectOptions reconnectOptions) noexcept;
572
579 Mqtt5ClientOptions &WithTopicAliasingOptions(TopicAliasingOptions topicAliasingOptions) noexcept;
580
589 Mqtt5ClientOptions &WithPingTimeoutMs(uint32_t pingTimeoutMs) noexcept;
590
599 Mqtt5ClientOptions &WithConnackTimeoutMs(uint32_t connackTimeoutMs) noexcept;
600
611 Mqtt5ClientOptions &WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept;
612
621 Mqtt5ClientOptions &WithAckTimeoutSec(uint32_t ackTimeoutSec) noexcept;
622
634 Mqtt5ClientOptions &WithWebsocketHandshakeTransformCallback(
635 OnWebSocketHandshakeIntercept callback) noexcept;
636
644 Mqtt5ClientOptions &WithClientConnectionSuccessCallback(OnConnectionSuccessHandler callback) noexcept;
645
653 Mqtt5ClientOptions &WithClientConnectionFailureCallback(OnConnectionFailureHandler callback) noexcept;
654
662 Mqtt5ClientOptions &WithClientDisconnectionCallback(OnDisconnectionHandler callback) noexcept;
663
671 Mqtt5ClientOptions &WithClientStoppedCallback(OnStoppedHandler callback) noexcept;
672
680 Mqtt5ClientOptions &WithClientAttemptingConnectCallback(OnAttemptingConnectHandler callback) noexcept;
681
689 Mqtt5ClientOptions &WithPublishReceivedCallback(OnPublishReceivedHandler callback) noexcept;
690
697 Mqtt5ClientOptions &WithMetricsCollection(bool enabled) noexcept;
698
706 bool initializeRawOptions(aws_mqtt5_client_options &raw_options) const noexcept;
707
711 Mqtt5ClientOptions &operator=(const Mqtt5ClientOptions &) = delete;
712 Mqtt5ClientOptions &operator=(Mqtt5ClientOptions &&) = delete;
713
714 private:
721 OnWebSocketHandshakeIntercept websocketHandshakeTransform;
722
726 OnConnectionSuccessHandler onConnectionSuccess;
727
731 OnConnectionFailureHandler onConnectionFailure;
732
736 OnDisconnectionHandler onDisconnection;
737
743 OnStoppedHandler onStopped;
744
750 OnAttemptingConnectHandler onAttemptingConnect;
751
758 OnPublishReceivedHandler onPublishReceived;
759
763 Crt::String m_hostName;
764
768 uint32_t m_port;
769
773 Io::ClientBootstrap *m_bootstrap;
774
779 Crt::Io::SocketOptions m_socketOptions;
780
785 Crt::Optional<Crt::Io::TlsConnectionOptions> m_tlsConnectionOptions;
786
790 Crt::Optional<Crt::Http::HttpClientConnectionProxyOptions> m_proxyOptions;
791
796 std::shared_ptr<ConnectPacket> m_connectOptions;
797
801 ClientSessionBehaviorType m_sessionBehavior;
802
807 ClientExtendedValidationAndFlowControl m_extendedValidationAndFlowControlOptions;
808
815 ClientOperationQueueBehaviorType m_offlineQueueBehavior;
816
820 ReconnectOptions m_reconnectionOptions;
821
825 aws_mqtt5_client_topic_alias_options m_topicAliasingOptions;
826
831 uint32_t m_pingTimeoutMs;
832
837 uint32_t m_connackTimeoutMs;
838
843 uint32_t m_ackTimeoutSec;
844
845 bool m_enableMetrics = true;
846 Mqtt::IoTDeviceSDKMetrics m_sdkMetrics;
847
848 /* Underlying Parameters */
849 Crt::Allocator *m_allocator;
850 aws_http_proxy_options m_httpProxyOptionsStorage;
851 aws_mqtt5_packet_connect_view m_packetConnectViewStorage;
852 struct aws_mqtt_iot_metrics m_metricsStorage;
853 };
854
855 } // namespace Mqtt5
856 } // namespace Crt
857} // namespace Aws
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Mqtt5Packets.h:672
Definition Mqtt5Packets.h:1560
Definition Mqtt5Client.h:333
Definition Mqtt5Client.h:454
Definition Mqtt5Packets.h:53
Definition Mqtt5Packets.h:2038
Definition Mqtt5Packets.h:2244
Definition MqttConnection.h:158
Definition Optional.h:19
aws_mqtt5_client_operation_queue_behavior_type ClientOperationQueueBehaviorType
Definition Mqtt5Types.h:223
InboundTopicAliasBehaviorType
Definition Mqtt5Client.h:79
std::function< void(const std::shared_ptr< Http::HttpRequest > &, int)> OnWebSocketHandshakeInterceptComplete
Definition Mqtt5Client.h:316
aws_mqtt5_client_session_behavior_type ClientSessionBehaviorType
Definition Mqtt5Types.h:186
std::function< void(const PublishReceivedEventData &)> OnPublishReceivedHandler
Definition Mqtt5Client.h:309
std::function< void(int, std::shared_ptr< PublishResult >)> OnPublishCompletionHandler
Definition Mqtt5Client.h:294
std::function< void(const OnStoppedEventData &)> OnStoppedHandler
Definition Mqtt5Client.h:289
std::function< void(const OnDisconnectionEventData &)> OnDisconnectionHandler
Definition Mqtt5Client.h:277
OutboundTopicAliasBehaviorType
Definition Mqtt5Client.h:41
std::function< void(const OnConnectionSuccessEventData &)> OnConnectionSuccessHandler
Definition Mqtt5Client.h:267
std::function< void(const OnAttemptingConnectEventData &)> OnAttemptingConnectHandler
Definition Mqtt5Client.h:283
aws_exponential_backoff_jitter_mode ExponentialBackoffJitterMode
Definition Mqtt5Types.h:242
std::function< void(std::shared_ptr< Http::HttpRequest >, const OnWebSocketHandshakeInterceptComplete &)> OnWebSocketHandshakeIntercept
Definition Mqtt5Client.h:325
std::function< void(const OnConnectionFailureEventData &)> OnConnectionFailureHandler
Definition Mqtt5Client.h:272
aws_mqtt5_extended_validation_and_flow_control_options ClientExtendedValidationAndFlowControl
Definition Mqtt5Types.h:200
std::function< void(int, std::shared_ptr< UnSubAckPacket >)> OnUnsubscribeCompletionHandler
Definition Mqtt5Client.h:304
std::function< void(int, std::shared_ptr< SubAckPacket >)> OnSubscribeCompletionHandler
Definition Mqtt5Client.h:299
aws_allocator Allocator
Definition Allocator.h:14
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition Allocator.cpp:24
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > String
Definition Types.h:45
Definition Allocator.h:11
Definition StringView.h:862
uint64_t unackedOperationCount
Definition Mqtt5Client.h:194
uint64_t incompleteOperationSize
Definition Mqtt5Client.h:188
uint64_t incompleteOperationCount
Definition Mqtt5Client.h:182
uint64_t unackedOperationSize
Definition Mqtt5Client.h:200
OnAttemptingConnectEventData()
Definition Mqtt5Client.h:209
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:220
int errorCode
Definition Mqtt5Client.h:219
OnConnectionFailureEventData()
Definition Mqtt5Client.h:217
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:230
OnConnectionSuccessEventData()
Definition Mqtt5Client.h:228
std::shared_ptr< NegotiatedSettings > negotiatedSettings
Definition Mqtt5Client.h:231
Definition Mqtt5Client.h:238
int errorCode
Definition Mqtt5Client.h:241
std::shared_ptr< DisconnectPacket > disconnectPacket
Definition Mqtt5Client.h:242
OnDisconnectionEventData()
Definition Mqtt5Client.h:239
Definition Mqtt5Client.h:250
OnStoppedEventData()
Definition Mqtt5Client.h:251
Definition Mqtt5Client.h:258
std::shared_ptr< PublishPacket > publishPacket
Definition Mqtt5Client.h:260
PublishReceivedEventData()
Definition Mqtt5Client.h:259
Definition Mqtt5Client.h:146
uint64_t m_minReconnectDelayMs
Definition Mqtt5Client.h:157
uint64_t m_minConnectedTimeToResetReconnectDelayMs
Definition Mqtt5Client.h:170
uint64_t m_maxReconnectDelayMs
Definition Mqtt5Client.h:163
ExponentialBackoffJitterMode m_reconnectMode
Definition Mqtt5Client.h:151
Definition Mqtt5Client.h:102
Crt::Optional< InboundTopicAliasBehaviorType > m_inboundBehavior
Definition Mqtt5Client.h:132
Crt::Optional< OutboundTopicAliasBehaviorType > m_outboundBehavior
Definition Mqtt5Client.h:112
Crt::Optional< uint16_t > m_outboundCacheMaxSize
Definition Mqtt5Client.h:124
Crt::Optional< uint16_t > m_inboundCacheMaxSize
Definition Mqtt5Client.h:142