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 Io
16 {
17 class L4ProxyConfig;
18 } // namespace Io
19
20 namespace Mqtt
21 {
22 class IoTSDKMetricsEncoder;
23 } // namespace Mqtt
24
25 namespace Mqtt5
26 {
27 class ConnectPacket;
28 class ConnAckPacket;
29 class DisconnectPacket;
30 class Mqtt5Client;
31 class Mqtt5ClientOptions;
32 class NegotiatedSettings;
33 class PublishResult;
34 class PublishPacket;
35 class PubAckPacket;
36 class SubscribePacket;
37 class SubAckPacket;
38 class UnsubscribePacket;
39 class UnSubAckPacket;
40 class Mqtt5ClientCore;
41
42 class Mqtt5to3AdapterOptions;
43
45
82
109
156
184
214
223
228 {
230
232 std::shared_ptr<ConnAckPacket> connAckPacket;
233 };
234
239 {
240 OnConnectionSuccessEventData() : connAckPacket(nullptr), negotiatedSettings(nullptr) {}
241
242 std::shared_ptr<ConnAckPacket> connAckPacket;
243 std::shared_ptr<NegotiatedSettings> negotiatedSettings;
244 };
245
250 {
251 OnDisconnectionEventData() : errorCode(AWS_ERROR_SUCCESS), disconnectPacket(nullptr) {}
252
254 std::shared_ptr<DisconnectPacket> disconnectPacket;
255 };
256
265
270 {
271 PublishReceivedEventData() : publishPacket(nullptr) {}
272
273 std::shared_ptr<PublishPacket> publishPacket;
274
287 std::function<ScopedResource<PublishAcknowledgementHandle>()> acquirePublishAcknowledgement;
288 };
289
295
300
304 using OnDisconnectionHandler = std::function<void(const OnDisconnectionEventData &)>;
305
311
316 using OnStoppedHandler = std::function<void(const OnStoppedEventData &)>;
317
321 using OnPublishCompletionHandler = std::function<void(int, std::shared_ptr<PublishResult>)>;
322
326 using OnSubscribeCompletionHandler = std::function<void(int, std::shared_ptr<SubAckPacket>)>;
327
331 using OnUnsubscribeCompletionHandler = std::function<void(int, std::shared_ptr<UnSubAckPacket>)>;
332
345
351 std::function<void(const std::shared_ptr<Http::HttpRequest> &, int)>;
352
360 std::function<void(std::shared_ptr<Http::HttpRequest>, const OnWebSocketHandshakeInterceptComplete &)>;
361
367 class AWS_CRT_CPP_API Mqtt5Client final : public std::enable_shared_from_this<Mqtt5Client>
368 {
370
371 public:
379 static std::shared_ptr<Mqtt5Client> NewMqtt5Client(
380 const Mqtt5ClientOptions &options,
381 Allocator *allocator = ApiAllocator()) noexcept;
382
390
394 operator bool() const noexcept;
395
399 int LastError() const noexcept;
400
408 bool Start() const noexcept;
409
416 bool Stop() noexcept;
417
427 bool Stop(std::shared_ptr<DisconnectPacket> disconnectPacket) noexcept;
428
437 bool Publish(
438 std::shared_ptr<PublishPacket> publishPacket,
440
449 bool Subscribe(
452
461 bool Unsubscribe(
464
470 const Mqtt5ClientOperationStatistics &GetOperationStatistics() noexcept;
471
483 bool InvokePublishAcknowledgement(
485
486 ~Mqtt5Client();
487
488 struct aws_mqtt5_client *GetUnderlyingHandle() const noexcept;
489
490 private:
491 Mqtt5Client(const Mqtt5ClientOptions &options, Allocator *allocator = ApiAllocator()) noexcept;
492
493 /* The client core to handle the user callbacks and c client termination */
494 std::shared_ptr<Mqtt5ClientCore> m_client_core;
495
496 Mqtt5ClientOperationStatistics m_operationStatistics;
497 };
498
503 {
504 friend class Mqtt5ClientCore;
505 friend class Mqtt5to3AdapterOptions;
506 friend class Mqtt::IoTSDKMetricsEncoder;
507
508 public:
513
521 Mqtt5ClientOptions &WithHostName(Crt::String hostname);
522
530 Mqtt5ClientOptions &WithPort(uint32_t port) noexcept;
531
540 Mqtt5ClientOptions &WithBootstrap(Io::ClientBootstrap *bootStrap) noexcept;
541
549 Mqtt5ClientOptions &WithSocketOptions(Io::SocketOptions socketOptions) noexcept;
550
558 Mqtt5ClientOptions &WithTlsConnectionOptions(const Io::TlsConnectionOptions &tslOptions) noexcept;
559
567 Mqtt5ClientOptions &WithHttpProxyOptions(
568 const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
569
577 Mqtt5ClientOptions &WithL4ProxyOptions(
578 const std::shared_ptr<Aws::Crt::Io::L4ProxyConfig> &proxyOptions) noexcept;
579
588
597
607 Mqtt5ClientOptions &WithClientExtendedValidationAndFlowControl(
609
620 Mqtt5ClientOptions &WithOfflineQueueBehavior(
622
632
640
650
660
671 Mqtt5ClientOptions &WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept;
672
682
694 Mqtt5ClientOptions &WithWebsocketHandshakeTransformCallback(
696
704 Mqtt5ClientOptions &WithClientConnectionSuccessCallback(OnConnectionSuccessHandler callback) noexcept;
705
713 Mqtt5ClientOptions &WithClientConnectionFailureCallback(OnConnectionFailureHandler callback) noexcept;
714
722 Mqtt5ClientOptions &WithClientDisconnectionCallback(OnDisconnectionHandler callback) noexcept;
723
731 Mqtt5ClientOptions &WithClientStoppedCallback(OnStoppedHandler callback) noexcept;
732
740 Mqtt5ClientOptions &WithClientAttemptingConnectCallback(OnAttemptingConnectHandler callback) noexcept;
741
749 Mqtt5ClientOptions &WithPublishReceivedCallback(OnPublishReceivedHandler callback) noexcept;
750
757 Mqtt5ClientOptions &WithMetricsCollection(bool enabled) noexcept;
758
766 Mqtt5ClientOptions &WithSdkMetrics(const Mqtt::AWSIoTMetrics &sdkMetrics) noexcept;
767
775 bool initializeRawOptions(aws_mqtt5_client_options &raw_options) const noexcept;
776
782
783 private:
790 OnWebSocketHandshakeIntercept websocketHandshakeTransform;
791
795 OnConnectionSuccessHandler onConnectionSuccess;
796
800 OnConnectionFailureHandler onConnectionFailure;
801
805 OnDisconnectionHandler onDisconnection;
806
812 OnStoppedHandler onStopped;
813
819 OnAttemptingConnectHandler onAttemptingConnect;
820
827 OnPublishReceivedHandler onPublishReceived;
828
832 Crt::String m_hostName;
833
837 uint32_t m_port;
838
842 Io::ClientBootstrap *m_bootstrap;
843
848 Crt::Io::SocketOptions m_socketOptions;
849
854 Crt::Optional<Crt::Io::TlsConnectionOptions> m_tlsConnectionOptions;
855
859 Crt::Optional<Crt::Http::HttpClientConnectionProxyOptions> m_proxyOptions;
860
864 std::shared_ptr<Crt::Io::L4ProxyConfig> m_l4ProxyOptions;
865
870 std::shared_ptr<ConnectPacket> m_connectOptions;
871
875 ClientSessionBehaviorType m_sessionBehavior;
876
881 ClientExtendedValidationAndFlowControl m_extendedValidationAndFlowControlOptions;
882
889 ClientOperationQueueBehaviorType m_offlineQueueBehavior;
890
894 ReconnectOptions m_reconnectionOptions;
895
899 aws_mqtt5_client_topic_alias_options m_topicAliasingOptions;
900
905 uint32_t m_pingTimeoutMs;
906
911 uint32_t m_connackTimeoutMs;
912
917 uint32_t m_ackTimeoutSec;
918
919 bool m_enableMetrics = true;
920 Crt::Optional<Crt::Mqtt::AWSIoTMetrics> m_sdkMetrics;
921
922 /* Underlying Parameters */
923 Crt::Allocator *m_allocator;
924 aws_http_proxy_options m_httpProxyOptionsStorage;
925 aws_mqtt5_packet_connect_view m_packetConnectViewStorage;
926
934 mutable Mqtt::AWSIoTMetrics m_finalMetrics;
935 mutable struct aws_mqtt_iot_metrics m_metricsStorage;
936 };
937
938 } // namespace Mqtt5
939 } // namespace Crt
940} // namespace Aws
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Mqtt5Packets.h:672
Definition Mqtt5Packets.h:1560
Definition Mqtt5Client.h:368
Definition Mqtt5Client.h:503
Definition Mqtt5Packets.h:53
Definition Mqtt5Packets.h:2038
Definition Mqtt5Packets.h:2244
Definition MqttConnection.h:163
Definition Optional.h:19
aws_mqtt5_client_operation_queue_behavior_type ClientOperationQueueBehaviorType
Definition Mqtt5Types.h:223
InboundTopicAliasBehaviorType
Definition Mqtt5Client.h:91
std::function< void(const std::shared_ptr< Http::HttpRequest > &, int)> OnWebSocketHandshakeInterceptComplete
Definition Mqtt5Client.h:351
aws_mqtt5_client_session_behavior_type ClientSessionBehaviorType
Definition Mqtt5Types.h:186
std::function< void(const PublishReceivedEventData &)> OnPublishReceivedHandler
Definition Mqtt5Client.h:344
std::function< void(int, std::shared_ptr< PublishResult >)> OnPublishCompletionHandler
Definition Mqtt5Client.h:321
std::function< void(const OnStoppedEventData &)> OnStoppedHandler
Definition Mqtt5Client.h:316
std::function< void(const OnDisconnectionEventData &)> OnDisconnectionHandler
Definition Mqtt5Client.h:304
OutboundTopicAliasBehaviorType
Definition Mqtt5Client.h:53
std::function< void(const OnConnectionSuccessEventData &)> OnConnectionSuccessHandler
Definition Mqtt5Client.h:294
std::function< void(const OnAttemptingConnectEventData &)> OnAttemptingConnectHandler
Definition Mqtt5Client.h:310
aws_exponential_backoff_jitter_mode ExponentialBackoffJitterMode
Definition Mqtt5Types.h:242
std::function< void(std::shared_ptr< Http::HttpRequest >, const OnWebSocketHandshakeInterceptComplete &)> OnWebSocketHandshakeIntercept
Definition Mqtt5Client.h:360
std::function< void(const OnConnectionFailureEventData &)> OnConnectionFailureHandler
Definition Mqtt5Client.h:299
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:331
std::function< void(int, std::shared_ptr< SubAckPacket >)> OnSubscribeCompletionHandler
Definition Mqtt5Client.h:326
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:206
uint64_t incompleteOperationSize
Definition Mqtt5Client.h:200
uint64_t incompleteOperationCount
Definition Mqtt5Client.h:194
uint64_t unackedOperationSize
Definition Mqtt5Client.h:212
OnAttemptingConnectEventData()
Definition Mqtt5Client.h:221
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:232
int errorCode
Definition Mqtt5Client.h:231
OnConnectionFailureEventData()
Definition Mqtt5Client.h:229
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:242
OnConnectionSuccessEventData()
Definition Mqtt5Client.h:240
std::shared_ptr< NegotiatedSettings > negotiatedSettings
Definition Mqtt5Client.h:243
Definition Mqtt5Client.h:250
int errorCode
Definition Mqtt5Client.h:253
std::shared_ptr< DisconnectPacket > disconnectPacket
Definition Mqtt5Client.h:254
OnDisconnectionEventData()
Definition Mqtt5Client.h:251
Definition Mqtt5Client.h:262
OnStoppedEventData()
Definition Mqtt5Client.h:263
Definition Mqtt5Client.h:270
std::function< ScopedResource< PublishAcknowledgementHandle >()> acquirePublishAcknowledgement
Definition Mqtt5Client.h:287
std::shared_ptr< PublishPacket > publishPacket
Definition Mqtt5Client.h:273
PublishReceivedEventData()
Definition Mqtt5Client.h:271
Definition Mqtt5Client.h:158
uint64_t m_minReconnectDelayMs
Definition Mqtt5Client.h:169
uint64_t m_minConnectedTimeToResetReconnectDelayMs
Definition Mqtt5Client.h:182
uint64_t m_maxReconnectDelayMs
Definition Mqtt5Client.h:175
ExponentialBackoffJitterMode m_reconnectMode
Definition Mqtt5Client.h:163
Definition Mqtt5Client.h:114
Crt::Optional< InboundTopicAliasBehaviorType > m_inboundBehavior
Definition Mqtt5Client.h:144
Crt::Optional< OutboundTopicAliasBehaviorType > m_outboundBehavior
Definition Mqtt5Client.h:124
Crt::Optional< uint16_t > m_outboundCacheMaxSize
Definition Mqtt5Client.h:136
Crt::Optional< uint16_t > m_inboundCacheMaxSize
Definition Mqtt5Client.h:154