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 Mqtt5
15 {
16 class ConnectPacket;
17 class ConnAckPacket;
18 class DisconnectPacket;
19 class Mqtt5Client;
20 class Mqtt5ClientOptions;
21 class NegotiatedSettings;
22 class PublishResult;
23 class PublishPacket;
24 class PubAckPacket;
25 class SubscribePacket;
26 class SubAckPacket;
27 class UnsubscribePacket;
28 class UnSubAckPacket;
29 class Mqtt5ClientCore;
30
31 class Mqtt5to3AdapterOptions;
32
69
96
143
171
201
210
215 {
217
219 std::shared_ptr<ConnAckPacket> connAckPacket;
220 };
221
226 {
227 OnConnectionSuccessEventData() : connAckPacket(nullptr), negotiatedSettings(nullptr) {}
228
229 std::shared_ptr<ConnAckPacket> connAckPacket;
230 std::shared_ptr<NegotiatedSettings> negotiatedSettings;
231 };
232
237 {
238 OnDisconnectionEventData() : errorCode(AWS_ERROR_SUCCESS), disconnectPacket(nullptr) {}
239
241 std::shared_ptr<DisconnectPacket> disconnectPacket;
242 };
243
252
257 {
258 PublishReceivedEventData() : publishPacket(nullptr) {}
259 std::shared_ptr<PublishPacket> publishPacket;
260 };
261
267
272
276 using OnDisconnectionHandler = std::function<void(const OnDisconnectionEventData &)>;
277
283
288 using OnStoppedHandler = std::function<void(const OnStoppedEventData &)>;
289
293 using OnPublishCompletionHandler = std::function<void(int, std::shared_ptr<PublishResult>)>;
294
298 using OnSubscribeCompletionHandler = std::function<void(int, std::shared_ptr<SubAckPacket>)>;
299
303 using OnUnsubscribeCompletionHandler = std::function<void(int, std::shared_ptr<UnSubAckPacket>)>;
304
309
315 std::function<void(const std::shared_ptr<Http::HttpRequest> &, int)>;
316
324 std::function<void(std::shared_ptr<Http::HttpRequest>, const OnWebSocketHandshakeInterceptComplete &)>;
325
331 class AWS_CRT_CPP_API Mqtt5Client final : public std::enable_shared_from_this<Mqtt5Client>
332 {
334
335 public:
343 static std::shared_ptr<Mqtt5Client> NewMqtt5Client(
344 const Mqtt5ClientOptions &options,
345 Allocator *allocator = ApiAllocator()) noexcept;
346
354
358 operator bool() const noexcept;
359
363 int LastError() const noexcept;
364
372 bool Start() const noexcept;
373
380 bool Stop() noexcept;
381
391 bool Stop(std::shared_ptr<DisconnectPacket> disconnectPacket) noexcept;
392
401 bool Publish(
402 std::shared_ptr<PublishPacket> publishPacket,
404
413 bool Subscribe(
416
425 bool Unsubscribe(
428
434 const Mqtt5ClientOperationStatistics &GetOperationStatistics() noexcept;
435
437
438 struct aws_mqtt5_client *GetUnderlyingHandle() const noexcept;
439
440 private:
441 Mqtt5Client(const Mqtt5ClientOptions &options, Allocator *allocator = ApiAllocator()) noexcept;
442
443 /* The client core to handle the user callbacks and c client termination */
444 std::shared_ptr<Mqtt5ClientCore> m_client_core;
445
446 Mqtt5ClientOperationStatistics m_operationStatistics;
447 };
448
453 {
454 friend class Mqtt5ClientCore;
455 friend class Mqtt5to3AdapterOptions;
456
457 public:
462
470 Mqtt5ClientOptions &WithHostName(Crt::String hostname);
471
479 Mqtt5ClientOptions &WithPort(uint32_t port) noexcept;
480
489 Mqtt5ClientOptions &WithBootstrap(Io::ClientBootstrap *bootStrap) noexcept;
490
498 Mqtt5ClientOptions &WithSocketOptions(Io::SocketOptions socketOptions) noexcept;
499
507 Mqtt5ClientOptions &WithTlsConnectionOptions(const Io::TlsConnectionOptions &tslOptions) noexcept;
508
516 Mqtt5ClientOptions &WithHttpProxyOptions(
517 const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
518
527
536
546 Mqtt5ClientOptions &WithClientExtendedValidationAndFlowControl(
548
559 Mqtt5ClientOptions &WithOfflineQueueBehavior(
561
571
579
589
599
610 Mqtt5ClientOptions &WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept;
611
621
633 Mqtt5ClientOptions &WithWebsocketHandshakeTransformCallback(
635
643 Mqtt5ClientOptions &WithClientConnectionSuccessCallback(OnConnectionSuccessHandler callback) noexcept;
644
652 Mqtt5ClientOptions &WithClientConnectionFailureCallback(OnConnectionFailureHandler callback) noexcept;
653
661 Mqtt5ClientOptions &WithClientDisconnectionCallback(OnDisconnectionHandler callback) noexcept;
662
670 Mqtt5ClientOptions &WithClientStoppedCallback(OnStoppedHandler callback) noexcept;
671
679 Mqtt5ClientOptions &WithClientAttemptingConnectCallback(OnAttemptingConnectHandler callback) noexcept;
680
688 Mqtt5ClientOptions &WithPublishReceivedCallback(OnPublishReceivedHandler callback) noexcept;
689
697 bool initializeRawOptions(aws_mqtt5_client_options &raw_options) const noexcept;
698
704
705 private:
712 OnWebSocketHandshakeIntercept websocketHandshakeTransform;
713
717 OnConnectionSuccessHandler onConnectionSuccess;
718
722 OnConnectionFailureHandler onConnectionFailure;
723
727 OnDisconnectionHandler onDisconnection;
728
734 OnStoppedHandler onStopped;
735
741 OnAttemptingConnectHandler onAttemptingConnect;
742
749 OnPublishReceivedHandler onPublishReceived;
750
754 Crt::String m_hostName;
755
759 uint32_t m_port;
760
764 Io::ClientBootstrap *m_bootstrap;
765
770 Crt::Io::SocketOptions m_socketOptions;
771
776 Crt::Optional<Crt::Io::TlsConnectionOptions> m_tlsConnectionOptions;
777
781 Crt::Optional<Crt::Http::HttpClientConnectionProxyOptions> m_proxyOptions;
782
787 std::shared_ptr<ConnectPacket> m_connectOptions;
788
792 ClientSessionBehaviorType m_sessionBehavior;
793
798 ClientExtendedValidationAndFlowControl m_extendedValidationAndFlowControlOptions;
799
806 ClientOperationQueueBehaviorType m_offlineQueueBehavior;
807
811 ReconnectOptions m_reconnectionOptions;
812
816 aws_mqtt5_client_topic_alias_options m_topicAliasingOptions;
817
822 uint32_t m_pingTimeoutMs;
823
828 uint32_t m_connackTimeoutMs;
829
834 uint32_t m_ackTimeoutSec;
835
836 /* Underlying Parameters */
837 Crt::Allocator *m_allocator;
838 aws_http_proxy_options m_httpProxyOptionsStorage;
839 aws_mqtt5_packet_connect_view m_packetConnectViewStorage;
840 };
841
842 } // namespace Mqtt5
843 } // namespace Crt
844} // namespace Aws
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Mqtt5Packets.h:663
Definition Mqtt5Packets.h:1551
Definition Mqtt5Client.h:332
Definition Mqtt5Client.h:453
Definition Mqtt5Packets.h:53
Definition Mqtt5Packets.h:2029
Definition Mqtt5Packets.h:2235
Definition MqttConnection.h:158
Definition Optional.h:19
aws_mqtt5_client_operation_queue_behavior_type ClientOperationQueueBehaviorType
Definition Mqtt5Types.h:223
InboundTopicAliasBehaviorType
Definition Mqtt5Client.h:78
std::function< void(const std::shared_ptr< Http::HttpRequest > &, int)> OnWebSocketHandshakeInterceptComplete
Definition Mqtt5Client.h:315
aws_mqtt5_client_session_behavior_type ClientSessionBehaviorType
Definition Mqtt5Types.h:186
std::function< void(const PublishReceivedEventData &)> OnPublishReceivedHandler
Definition Mqtt5Client.h:308
std::function< void(int, std::shared_ptr< PublishResult >)> OnPublishCompletionHandler
Definition Mqtt5Client.h:293
std::function< void(const OnStoppedEventData &)> OnStoppedHandler
Definition Mqtt5Client.h:288
std::function< void(const OnDisconnectionEventData &)> OnDisconnectionHandler
Definition Mqtt5Client.h:276
OutboundTopicAliasBehaviorType
Definition Mqtt5Client.h:40
std::function< void(const OnConnectionSuccessEventData &)> OnConnectionSuccessHandler
Definition Mqtt5Client.h:266
std::function< void(const OnAttemptingConnectEventData &)> OnAttemptingConnectHandler
Definition Mqtt5Client.h:282
aws_exponential_backoff_jitter_mode ExponentialBackoffJitterMode
Definition Mqtt5Types.h:242
std::function< void(std::shared_ptr< Http::HttpRequest >, const OnWebSocketHandshakeInterceptComplete &)> OnWebSocketHandshakeIntercept
Definition Mqtt5Client.h:324
std::function< void(const OnConnectionFailureEventData &)> OnConnectionFailureHandler
Definition Mqtt5Client.h:271
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:303
std::function< void(int, std::shared_ptr< SubAckPacket >)> OnSubscribeCompletionHandler
Definition Mqtt5Client.h:298
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:193
uint64_t incompleteOperationSize
Definition Mqtt5Client.h:187
uint64_t incompleteOperationCount
Definition Mqtt5Client.h:181
uint64_t unackedOperationSize
Definition Mqtt5Client.h:199
OnAttemptingConnectEventData()
Definition Mqtt5Client.h:208
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:219
int errorCode
Definition Mqtt5Client.h:218
OnConnectionFailureEventData()
Definition Mqtt5Client.h:216
std::shared_ptr< ConnAckPacket > connAckPacket
Definition Mqtt5Client.h:229
OnConnectionSuccessEventData()
Definition Mqtt5Client.h:227
std::shared_ptr< NegotiatedSettings > negotiatedSettings
Definition Mqtt5Client.h:230
Definition Mqtt5Client.h:237
int errorCode
Definition Mqtt5Client.h:240
std::shared_ptr< DisconnectPacket > disconnectPacket
Definition Mqtt5Client.h:241
OnDisconnectionEventData()
Definition Mqtt5Client.h:238
Definition Mqtt5Client.h:249
OnStoppedEventData()
Definition Mqtt5Client.h:250
Definition Mqtt5Client.h:257
std::shared_ptr< PublishPacket > publishPacket
Definition Mqtt5Client.h:259
PublishReceivedEventData()
Definition Mqtt5Client.h:258
Definition Mqtt5Client.h:145
uint64_t m_minReconnectDelayMs
Definition Mqtt5Client.h:156
uint64_t m_minConnectedTimeToResetReconnectDelayMs
Definition Mqtt5Client.h:169
uint64_t m_maxReconnectDelayMs
Definition Mqtt5Client.h:162
ExponentialBackoffJitterMode m_reconnectMode
Definition Mqtt5Client.h:150
Definition Mqtt5Client.h:101
Crt::Optional< InboundTopicAliasBehaviorType > m_inboundBehavior
Definition Mqtt5Client.h:131
Crt::Optional< OutboundTopicAliasBehaviorType > m_outboundBehavior
Definition Mqtt5Client.h:111
Crt::Optional< uint16_t > m_outboundCacheMaxSize
Definition Mqtt5Client.h:123
Crt::Optional< uint16_t > m_inboundCacheMaxSize
Definition Mqtt5Client.h:141