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
9
10namespace Aws
11{
12 namespace Crt
13 {
14 namespace Mqtt
15 {
17 }
18 namespace Mqtt5
19 {
20 class ConnectPacket;
21 class ConnAckPacket;
22 class DisconnectPacket;
23 class Mqtt5Client;
24 class Mqtt5ClientOptions;
25 class NegotiatedSettings;
26 class PublishResult;
27 class PublishPacket;
28 class PubAckPacket;
29 class SubscribePacket;
30 class SubAckPacket;
31 class UnsubscribePacket;
32 class UnSubAckPacket;
33 class Mqtt5ClientCore;
34
35 class Mqtt5to3AdapterOptions;
36
38
75
102
149
177
207
216
221 {
223
225 std::shared_ptr<ConnAckPacket> connAckPacket;
226 };
227
232 {
233 OnConnectionSuccessEventData() : connAckPacket(nullptr), negotiatedSettings(nullptr) {}
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 {
264 PublishReceivedEventData() : publishPacket(nullptr) {}
265
266 std::shared_ptr<PublishPacket> publishPacket;
267
280 std::function<ScopedResource<PublishAcknowledgementHandle>()> acquirePublishAcknowledgement;
281 };
282
288
293
297 using OnDisconnectionHandler = std::function<void(const OnDisconnectionEventData &)>;
298
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
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
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,
433
442 bool Subscribe(
445
454 bool Unsubscribe(
457
463 const Mqtt5ClientOperationStatistics &GetOperationStatistics() noexcept;
464
476 bool InvokePublishAcknowledgement(
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;
498 friend class Mqtt5to3AdapterOptions;
499
500 public:
505
513 Mqtt5ClientOptions &WithHostName(Crt::String hostname);
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
559 Mqtt5ClientOptions &WithHttpProxyOptions(
560 const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
561
570
579
589 Mqtt5ClientOptions &WithClientExtendedValidationAndFlowControl(
591
602 Mqtt5ClientOptions &WithOfflineQueueBehavior(
604
614
622
632
642
653 Mqtt5ClientOptions &WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept;
654
664
676 Mqtt5ClientOptions &WithWebsocketHandshakeTransformCallback(
678
686 Mqtt5ClientOptions &WithClientConnectionSuccessCallback(OnConnectionSuccessHandler callback) noexcept;
687
695 Mqtt5ClientOptions &WithClientConnectionFailureCallback(OnConnectionFailureHandler callback) noexcept;
696
704 Mqtt5ClientOptions &WithClientDisconnectionCallback(OnDisconnectionHandler callback) noexcept;
705
713 Mqtt5ClientOptions &WithClientStoppedCallback(OnStoppedHandler callback) noexcept;
714
722 Mqtt5ClientOptions &WithClientAttemptingConnectCallback(OnAttemptingConnectHandler callback) noexcept;
723
731 Mqtt5ClientOptions &WithPublishReceivedCallback(OnPublishReceivedHandler callback) noexcept;
732
739 Mqtt5ClientOptions &WithMetricsCollection(bool enabled) noexcept;
740
748 bool initializeRawOptions(aws_mqtt5_client_options &raw_options) const noexcept;
749
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
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Mqtt5Packets.h:672
Definition Mqtt5Packets.h:1560
Definition Mqtt5Client.h:361
Definition Mqtt5Client.h:496
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:84
std::function< void(const std::shared_ptr< Http::HttpRequest > &, int)> OnWebSocketHandshakeInterceptComplete
Definition Mqtt5Client.h:344
aws_mqtt5_client_session_behavior_type ClientSessionBehaviorType
Definition Mqtt5Types.h:186
std::function< void(const PublishReceivedEventData &)> OnPublishReceivedHandler
Definition Mqtt5Client.h:337
std::function< void(int, std::shared_ptr< PublishResult >)> OnPublishCompletionHandler
Definition Mqtt5Client.h:314
std::function< void(const OnStoppedEventData &)> OnStoppedHandler
Definition Mqtt5Client.h:309
std::function< void(const OnDisconnectionEventData &)> OnDisconnectionHandler
Definition Mqtt5Client.h:297
OutboundTopicAliasBehaviorType
Definition Mqtt5Client.h:46
std::function< void(const OnConnectionSuccessEventData &)> OnConnectionSuccessHandler
Definition Mqtt5Client.h:287
std::function< void(const OnAttemptingConnectEventData &)> OnAttemptingConnectHandler
Definition Mqtt5Client.h:303
aws_exponential_backoff_jitter_mode ExponentialBackoffJitterMode
Definition Mqtt5Types.h:242
std::function< void(std::shared_ptr< Http::HttpRequest >, const OnWebSocketHandshakeInterceptComplete &)> OnWebSocketHandshakeIntercept
Definition Mqtt5Client.h:353
std::function< void(const OnConnectionFailureEventData &)> OnConnectionFailureHandler
Definition Mqtt5Client.h:292
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:324
std::function< void(int, std::shared_ptr< SubAckPacket >)> OnSubscribeCompletionHandler
Definition Mqtt5Client.h:319
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:163
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