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
MqttConnection.h
Go to the documentation of this file.
1#pragma once
7#include <aws/crt/Exports.h>
9#include <aws/crt/Types.h>
14
15#include <aws/mqtt/client.h>
16#include <aws/mqtt/v5/mqtt5_client.h>
17
18#include <functional>
19#include <memory>
20
21namespace Aws
22{
23 namespace Crt
24 {
25 namespace Http
26 {
27 class HttpRequest;
28 }
29
30 namespace Io
31 {
32 class L4ProxyConfig;
33 }
34
35 namespace Mqtt5
36 {
37 class Mqtt5Client;
38 class Mqtt5ClientCore;
39 } // namespace Mqtt5
40
41 namespace Mqtt
42 {
43 class MqttClient;
44 class MqttConnectionCore;
45 class MqttConnection;
46
52 {
53 };
54
71
76 {
81 int error;
82 };
83
87 using OnConnectionInterruptedHandler = std::function<void(MqttConnection &connection, int error)>;
88
93 std::function<void(MqttConnection &connection, ReturnCode connectCode, bool sessionPresent)>;
94
98 using OnConnectionCompletedHandler = std::function<
99 void(MqttConnection &connection, int errorCode, ReturnCode returnCode, bool sessionPresent)>;
100
108 std::function<void(MqttConnection &connection, OnConnectionClosedData *callbackData)>;
109
116 std::function<void(MqttConnection &connection, OnConnectionSuccessData *callbackData)>;
117
124 std::function<void(MqttConnection &connection, OnConnectionFailureData *callbackData)>;
125
129 using OnDisconnectHandler = std::function<void(MqttConnection &connection)>;
130
135 std::function<void(MqttConnection &connection, const String &topic, const ByteBuf &payload)>;
136
142 std::function<void(const std::shared_ptr<Http::HttpRequest> &, int errorCode)>;
143
150 using OnWebSocketHandshakeIntercept = std::function<
151 void(std::shared_ptr<Http::HttpRequest> req, const OnWebSocketHandshakeInterceptComplete &onComplete)>;
152
162 class AWS_CRT_CPP_API MqttConnection final : public std::enable_shared_from_this<MqttConnection>
163 {
164 friend class MqttClient;
165 friend class Mqtt5::Mqtt5ClientCore;
166
167 public:
173
180 static std::shared_ptr<Crt::Mqtt::MqttConnection> NewConnectionFromMqtt5Client(
181 std::shared_ptr<Mqtt5::Mqtt5Client> mqtt5client) noexcept;
182
186 operator bool() const noexcept;
187
191 int LastError() const noexcept;
192
201 bool SetWill(const char *topic, QOS qos, bool retain, const ByteBuf &payload) noexcept;
202
210 bool SetLogin(const char *username, const char *password) noexcept;
211
215 bool SetWebsocketProxyOptions(const Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
216
226 bool SetHttpProxyOptions(const Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
227
235 bool SetL4ProxyOptions(const std::shared_ptr<Aws::Crt::Io::L4ProxyConfig> &l4ProxyOptions) noexcept;
236
248 bool SetReconnectTimeout(uint64_t min_seconds, uint64_t max_seconds) noexcept;
249
266 bool Connect(
267 const char *clientId,
268 bool cleanSession,
269 uint16_t keepAliveTimeSecs = 0,
270 uint32_t pingTimeoutMs = 0,
271 uint32_t protocolOperationTimeoutMs = 0) noexcept;
272
277 bool Disconnect() noexcept;
278
280 aws_mqtt_client_connection *GetUnderlyingConnection() const noexcept;
281
294 uint16_t Subscribe(
295 const char *topicFilter,
296 QOS qos,
297 OnMessageReceivedHandler &&onMessage,
298 OnSubAckHandler &&onSubAck) noexcept;
299
303 uint16_t Subscribe(
304 const char *topicFilter,
305 QOS qos,
306 OnPublishReceivedHandler &&onPublish,
307 OnSubAckHandler &&onSubAck) noexcept;
308
321 uint16_t Subscribe(
322 const Vector<std::pair<const char *, OnMessageReceivedHandler>> &topicFilters,
323 QOS qos,
324 OnMultiSubAckHandler &&onOpComplete) noexcept;
325
329 uint16_t Subscribe(
330 const Vector<std::pair<const char *, OnPublishReceivedHandler>> &topicFilters,
331 QOS qos,
332 OnMultiSubAckHandler &&onOpComplete) noexcept;
333
341 bool SetOnMessageHandler(OnMessageReceivedHandler &&onMessage) noexcept;
342
346 bool SetOnMessageHandler(OnPublishReceivedHandler &&onPublish) noexcept;
347
357 uint16_t Unsubscribe(const char *topicFilter, OnOperationCompleteHandler &&onOpComplete) noexcept;
358
372 uint16_t Publish(
373 const char *topic,
374 QOS qos,
375 bool retain,
376 const ByteBuf &payload,
377 OnOperationCompleteHandler &&onOpComplete) noexcept;
378
384 const MqttConnectionOperationStatistics &GetOperationStatistics() noexcept;
385
389 OnConnectionInterruptedHandler OnConnectionInterrupted;
390
394 OnConnectionResumedHandler OnConnectionResumed;
395
399 OnConnectionCompletedHandler OnConnectionCompleted;
400
405
412 OnWebSocketHandshakeIntercept WebsocketInterceptor;
413
421 OnConnectionClosedHandler OnConnectionClosed;
422
428 OnConnectionSuccessHandler OnConnectionSuccess;
429
435 OnConnectionFailureHandler OnConnectionFailure;
436
437 private:
443 MqttConnection() = default;
444
453 static std::shared_ptr<MqttConnection> s_CreateMqttConnection(
454 aws_mqtt_client *client,
455 MqttConnectionOptions options) noexcept;
456
465 static std::shared_ptr<MqttConnection> s_CreateMqttConnection(
466 aws_mqtt5_client *mqtt5Client,
467 MqttConnectionOptions options) noexcept;
472 std::shared_ptr<MqttConnectionCore> m_connectionCore;
473 };
474 } // namespace Mqtt
475 } // namespace Crt
476} // namespace Aws
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition MqttClient.h:48
Definition MqttConnection.h:163
MqttConnection & operator=(MqttConnection &&)=delete
MqttConnection(MqttConnection &&)=delete
MqttConnection(const MqttConnection &)=delete
MqttConnection & operator=(const MqttConnection &)=delete
std::function< void(MqttConnection &connection, uint16_t packetId, const Vector< String > &topics, QOS qos, int errorCode)> OnMultiSubAckHandler
Definition MqttTypes.h:87
std::function< void(std::shared_ptr< Http::HttpRequest > req, const OnWebSocketHandshakeInterceptComplete &onComplete)> OnWebSocketHandshakeIntercept
Definition MqttConnection.h:151
std::function< void(MqttConnection &connection, OnConnectionClosedData *callbackData)> OnConnectionClosedHandler
Definition MqttConnection.h:108
std::function< void(MqttConnection &connection, ReturnCode connectCode, bool sessionPresent)> OnConnectionResumedHandler
Definition MqttConnection.h:93
std::function< void(MqttConnection &connection, const String &topic, const ByteBuf &payload, bool dup, QOS qos, bool retain)> OnMessageReceivedHandler
Definition MqttTypes.h:59
std::function< void(MqttConnection &connection, uint16_t packetId, int errorCode)> OnOperationCompleteHandler
Definition MqttTypes.h:100
std::function< void(MqttConnection &connection, const String &topic, const ByteBuf &payload)> OnPublishReceivedHandler
Definition MqttConnection.h:135
std::function< void(MqttConnection &connection, int error)> OnConnectionInterruptedHandler
Definition MqttConnection.h:87
std::function< void(const std::shared_ptr< Http::HttpRequest > &, int errorCode)> OnWebSocketHandshakeInterceptComplete
Definition MqttConnection.h:142
aws_mqtt_qos QOS
Definition Types.h:40
std::function< void(MqttConnection &connection, OnConnectionSuccessData *callbackData)> OnConnectionSuccessHandler
Definition MqttConnection.h:116
std::function< void(MqttConnection &connection)> OnDisconnectHandler
Definition MqttConnection.h:129
aws_mqtt_connect_return_code ReturnCode
Definition Types.h:41
std::function< void(MqttConnection &connection, OnConnectionFailureData *callbackData)> OnConnectionFailureHandler
Definition MqttConnection.h:124
std::function< void(MqttConnection &connection, uint16_t packetId, const String &topic, QOS qos, int errorCode)> OnSubAckHandler
Definition MqttTypes.h:71
std::function< void(MqttConnection &connection, int errorCode, ReturnCode returnCode, bool sessionPresent)> OnConnectionCompletedHandler
Definition MqttConnection.h:99
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > String
Definition Types.h:45
aws_byte_buf ByteBuf
Definition Types.h:30
std::vector< T, StlAllocator< T > > Vector
Definition Types.h:53
Definition Allocator.h:11
Definition StringView.h:862
Definition MqttTypes.h:29
Definition MqttConnection.h:52
Definition MqttConnection.h:76
int error
Definition MqttConnection.h:81
Definition MqttConnection.h:59
bool sessionPresent
Definition MqttConnection.h:69
ReturnCode returnCode
Definition MqttConnection.h:63