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 Mqtt
16 {
17 class IoTSDKMetricsEncoder;
18 } // namespace Mqtt
19
20 namespace Mqtt5
21 {
22 class ConnectPacket;
23 class ConnAckPacket;
24 class DisconnectPacket;
25 class Mqtt5Client;
26 class Mqtt5ClientOptions;
27 class NegotiatedSettings;
28 class PublishResult;
29 class PublishPacket;
30 class PubAckPacket;
31 class SubscribePacket;
32 class SubAckPacket;
33 class UnsubscribePacket;
34 class UnSubAckPacket;
35 class Mqtt5ClientCore;
36
37 class Mqtt5to3AdapterOptions;
38
40
77
104
151
179
209
218
223 {
225
227 std::shared_ptr<ConnAckPacket> connAckPacket;
228 };
229
234 {
235 OnConnectionSuccessEventData() : connAckPacket(nullptr), negotiatedSettings(nullptr) {}
236
237 std::shared_ptr<ConnAckPacket> connAckPacket;
238 std::shared_ptr<NegotiatedSettings> negotiatedSettings;
239 };
240
245 {
246 OnDisconnectionEventData() : errorCode(AWS_ERROR_SUCCESS), disconnectPacket(nullptr) {}
247
249 std::shared_ptr<DisconnectPacket> disconnectPacket;
250 };
251
260
265 {
266 PublishReceivedEventData() : publishPacket(nullptr) {}
267
268 std::shared_ptr<PublishPacket> publishPacket;
269
282 std::function<ScopedResource<PublishAcknowledgementHandle>()> acquirePublishAcknowledgement;
283 };
284
290
295
299 using OnDisconnectionHandler = std::function<void(const OnDisconnectionEventData &)>;
300
306
311 using OnStoppedHandler = std::function<void(const OnStoppedEventData &)>;
312
316 using OnPublishCompletionHandler = std::function<void(int, std::shared_ptr<PublishResult>)>;
317
321 using OnSubscribeCompletionHandler = std::function<void(int, std::shared_ptr<SubAckPacket>)>;
322
326 using OnUnsubscribeCompletionHandler = std::function<void(int, std::shared_ptr<UnSubAckPacket>)>;
327
340
346 std::function<void(const std::shared_ptr<Http::HttpRequest> &, int)>;
347
355 std::function<void(std::shared_ptr<Http::HttpRequest>, const OnWebSocketHandshakeInterceptComplete &)>;
356
362 class AWS_CRT_CPP_API Mqtt5Client final : public std::enable_shared_from_this<Mqtt5Client>
363 {
365
366 public:
374 static std::shared_ptr<Mqtt5Client> NewMqtt5Client(
375 const Mqtt5ClientOptions &options,
376 Allocator *allocator = ApiAllocator()) noexcept;
377
385
389 operator bool() const noexcept;
390
394 int LastError() const noexcept;
395
403 bool Start() const noexcept;
404
411 bool Stop() noexcept;
412
422 bool Stop(std::shared_ptr<DisconnectPacket> disconnectPacket) noexcept;
423
432 bool Publish(
433 std::shared_ptr<PublishPacket> publishPacket,
435
444 bool Subscribe(
447
456 bool Unsubscribe(
459
465 const Mqtt5ClientOperationStatistics &GetOperationStatistics() noexcept;
466
478 bool InvokePublishAcknowledgement(
480
481 ~Mqtt5Client();
482
483 struct aws_mqtt5_client *GetUnderlyingHandle() const noexcept;
484
485 private:
486 Mqtt5Client(const Mqtt5ClientOptions &options, Allocator *allocator = ApiAllocator()) noexcept;
487
488 /* The client core to handle the user callbacks and c client termination */
489 std::shared_ptr<Mqtt5ClientCore> m_client_core;
490
491 Mqtt5ClientOperationStatistics m_operationStatistics;
492 };
493
498 {
499 friend class Mqtt5ClientCore;
500 friend class Mqtt5to3AdapterOptions;
501 friend class Mqtt::IoTSDKMetricsEncoder;
502
503 public:
508
516 Mqtt5ClientOptions &WithHostName(Crt::String hostname);
517
525 Mqtt5ClientOptions &WithPort(uint32_t port) noexcept;
526
535 Mqtt5ClientOptions &WithBootstrap(Io::ClientBootstrap *bootStrap) noexcept;
536
544 Mqtt5ClientOptions &WithSocketOptions(Io::SocketOptions socketOptions) noexcept;
545
553 Mqtt5ClientOptions &WithTlsConnectionOptions(const Io::TlsConnectionOptions &tslOptions) noexcept;
554
562 Mqtt5ClientOptions &WithHttpProxyOptions(
563 const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
564
573
582
592 Mqtt5ClientOptions &WithClientExtendedValidationAndFlowControl(
594
605 Mqtt5ClientOptions &WithOfflineQueueBehavior(
607
617
625
635
645
656 Mqtt5ClientOptions &WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept;
657
667
679 Mqtt5ClientOptions &WithWebsocketHandshakeTransformCallback(
681
689 Mqtt5ClientOptions &WithClientConnectionSuccessCallback(OnConnectionSuccessHandler callback) noexcept;
690
698 Mqtt5ClientOptions &WithClientConnectionFailureCallback(OnConnectionFailureHandler callback) noexcept;
699
707 Mqtt5ClientOptions &WithClientDisconnectionCallback(OnDisconnectionHandler callback) noexcept;
708
716 Mqtt5ClientOptions &WithClientStoppedCallback(OnStoppedHandler callback) noexcept;
717
725 Mqtt5ClientOptions &WithClientAttemptingConnectCallback(OnAttemptingConnectHandler callback) noexcept;
726
734 Mqtt5ClientOptions &WithPublishReceivedCallback(OnPublishReceivedHandler callback) noexcept;
735
742 Mqtt5ClientOptions &WithMetricsCollection(bool enabled) noexcept;
743
751 Mqtt5ClientOptions &WithSdkMetrics(const Mqtt::AWSIoTMetrics &sdkMetrics) noexcept;
752
760 bool initializeRawOptions(aws_mqtt5_client_options &raw_options) const noexcept;
761
767
768 private:
775 OnWebSocketHandshakeIntercept websocketHandshakeTransform;
776
780 OnConnectionSuccessHandler onConnectionSuccess;
781
785 OnConnectionFailureHandler onConnectionFailure;
786
790 OnDisconnectionHandler onDisconnection;
791
797 OnStoppedHandler onStopped;
798
804 OnAttemptingConnectHandler onAttemptingConnect;
805
812 OnPublishReceivedHandler onPublishReceived;
813
817 Crt::String m_hostName;
818
822 uint32_t m_port;
823
827 Io::ClientBootstrap *m_bootstrap;
828
833 Crt::Io::SocketOptions m_socketOptions;
834
839 Crt::Optional<Crt::Io::TlsConnectionOptions> m_tlsConnectionOptions;
840
844 Crt::Optional<Crt::Http::HttpClientConnectionProxyOptions> m_proxyOptions;
845
850 std::shared_ptr<ConnectPacket> m_connectOptions;
851
855 ClientSessionBehaviorType m_sessionBehavior;
856
861 ClientExtendedValidationAndFlowControl m_extendedValidationAndFlowControlOptions;
862
869 ClientOperationQueueBehaviorType m_offlineQueueBehavior;
870
874 ReconnectOptions m_reconnectionOptions;
875
879 aws_mqtt5_client_topic_alias_options m_topicAliasingOptions;
880
885 uint32_t m_pingTimeoutMs;
886
891 uint32_t m_connackTimeoutMs;
892
897 uint32_t m_ackTimeoutSec;
898
899 bool m_enableMetrics = true;
900 Crt::Optional<Crt::Mqtt::AWSIoTMetrics> m_sdkMetrics;
901
902 /* Underlying Parameters */
903 Crt::Allocator *m_allocator;
904 aws_http_proxy_options m_httpProxyOptionsStorage;
905 aws_mqtt5_packet_connect_view m_packetConnectViewStorage;
906
914 mutable Mqtt::AWSIoTMetrics m_finalMetrics;
915 mutable struct aws_mqtt_iot_metrics m_metricsStorage;
916 };
917
918 } // namespace Mqtt5
919 } // namespace Crt
920} // namespace Aws
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Mqtt5Packets.h:672
Definition Mqtt5Packets.h:1560
Definition Mqtt5Client.h:363
Definition Mqtt5Client.h:498
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:86
std::function< void(const std::shared_ptr< Http::HttpRequest > &, int)> OnWebSocketHandshakeInterceptComplete
Definition Mqtt5Client.h:346
aws_mqtt5_client_session_behavior_type ClientSessionBehaviorType
Definition Mqtt5Types.h:186
std::function< void(const PublishReceivedEventData &)> OnPublishReceivedHandler
Definition Mqtt5Client.h:339
std::function< void(int, std::shared_ptr< PublishResult >)> OnPublishCompletionHandler
Definition Mqtt5Client.h:316
std::function< void(const OnStoppedEventData &)> OnStoppedHandler
Definition Mqtt5Client.h:311
std::function< void(const OnDisconnectionEventData &)> OnDisconnectionHandler
Definition Mqtt5Client.h:299
OutboundTopicAliasBehaviorType
Definition Mqtt5Client.h:48
std::function< void(const OnConnectionSuccessEventData &)> OnConnectionSuccessHandler
Definition Mqtt5Client.h:289
std::function< void(const OnAttemptingConnectEventData &)> OnAttemptingConnectHandler
Definition Mqtt5Client.h:305
aws_exponential_backoff_jitter_mode ExponentialBackoffJitterMode
Definition Mqtt5Types.h:242
std::function< void(std::shared_ptr< Http::HttpRequest >, const OnWebSocketHandshakeInterceptComplete &)> OnWebSocketHandshakeIntercept
Definition Mqtt5Client.h:355
std::function< void(const OnConnectionFailureEventData &)> OnConnectionFailureHandler
Definition Mqtt5Client.h:294
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:326
std::function< void(int, std::shared_ptr< SubAckPacket >)> OnSubscribeCompletionHandler
Definition Mqtt5Client.h:321
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
std::unique_ptr< T, std::function< void(T *)> > ScopedResource
Definition Types.h:168
Definition Allocator.h:11
Definition StringView.h:862
uint64_t unackedOperationCount
Definition Mqtt5Client.h:201
uint64_t incompleteOperationSize
Definition Mqtt5Client.h:195
uint64_t incompleteOperationCount
Definition Mqtt5Client.h:189
uint64_t unackedOperationSize
Definition Mqtt5Client.h:207
OnAttemptingConnectEventData()
Definition Mqtt5Client.h:216
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:227
int errorCode
Definition Mqtt5Client.h:226
OnConnectionFailureEventData()
Definition Mqtt5Client.h:224
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:237
OnConnectionSuccessEventData()
Definition Mqtt5Client.h:235
std::shared_ptr< NegotiatedSettings > negotiatedSettings
Definition Mqtt5Client.h:238
Definition Mqtt5Client.h:245
int errorCode
Definition Mqtt5Client.h:248
std::shared_ptr< DisconnectPacket > disconnectPacket
Definition Mqtt5Client.h:249
OnDisconnectionEventData()
Definition Mqtt5Client.h:246
Definition Mqtt5Client.h:257
OnStoppedEventData()
Definition Mqtt5Client.h:258
Definition Mqtt5Client.h:265
std::function< ScopedResource< PublishAcknowledgementHandle >()> acquirePublishAcknowledgement
Definition Mqtt5Client.h:282
std::shared_ptr< PublishPacket > publishPacket
Definition Mqtt5Client.h:268
PublishReceivedEventData()
Definition Mqtt5Client.h:266
Definition Mqtt5Client.h:153
uint64_t m_minReconnectDelayMs
Definition Mqtt5Client.h:164
uint64_t m_minConnectedTimeToResetReconnectDelayMs
Definition Mqtt5Client.h:177
uint64_t m_maxReconnectDelayMs
Definition Mqtt5Client.h:170
ExponentialBackoffJitterMode m_reconnectMode
Definition Mqtt5Client.h:158
Definition Mqtt5Client.h:109
Crt::Optional< InboundTopicAliasBehaviorType > m_inboundBehavior
Definition Mqtt5Client.h:139
Crt::Optional< OutboundTopicAliasBehaviorType > m_outboundBehavior
Definition Mqtt5Client.h:119
Crt::Optional< uint16_t > m_outboundCacheMaxSize
Definition Mqtt5Client.h:131
Crt::Optional< uint16_t > m_inboundCacheMaxSize
Definition Mqtt5Client.h:149