PahoMqttCpp
MQTT C++ Client for POSIX and Windows
Loading...
Searching...
No Matches
event.h
Go to the documentation of this file.
1
7
8/*******************************************************************************
9 * Copyright (c) 2024 Frank Pagliughi <fpagliughi@mindspring.com>
10 *
11 * All rights reserved. This program and the accompanying materials
12 * are made available under the terms of the Eclipse Public License v2.0
13 * and Eclipse Distribution License v1.0 which accompany this distribution.
14 *
15 * The Eclipse Public License is available at
16 * http://www.eclipse.org/legal/epl-v20.html
17 * and the Eclipse Distribution License is available at
18 * http://www.eclipse.org/org/documents/edl-v10.php.
19 *
20 * Contributors:
21 * Frank Pagliughi - initial implementation and documentation
22 *******************************************************************************/
23
24#ifndef __mqtt_event_h
25#define __mqtt_event_h
26
27#include <variant>
28
29#include "mqtt/message.h"
30#include "mqtt/properties.h"
31#include "mqtt/reason_code.h"
32#include "mqtt/types.h"
33
34namespace mqtt {
35
37
40{
41 string cause;
42};
43
46{
47 string cause;
48};
49
56
59{
60};
61
62/* Event for when a message arrives is just a message pointer */
63
65
86class event
87{
88public:
90 using event_type = std::variant<
93
94private:
95 event_type evt_{};
96
97public:
102 event() {}
107 event(event_type evt) : evt_{std::move(evt)} {}
112 event(message_ptr msg) : evt_{std::move(msg)} {}
117 event(const_message_ptr msg) : evt_{std::move(msg)} {}
122 event(connected_event evt) : evt_{std::move(evt)} {}
127 event(connection_lost_event evt) : evt_{std::move(evt)} {}
132 event(disconnected_event evt) : evt_{std::move(evt)} {}
137 event(shutdown_event evt) : evt_{std::move(evt)} {}
142 event(const event& evt) : evt_{evt.evt_} {}
147 event(event&& evt) : evt_{std::move(evt.evt_)} {}
153 event& operator=(event_type evt) {
154 evt_ = std::move(evt);
155 return *this;
156 }
157
162 event& operator=(const event& rhs) {
163 if (&rhs != this)
164 evt_ = rhs.evt_;
165 return *this;
166 }
167
172 event& operator=(event&& rhs) {
173 if (&rhs != this)
174 evt_ = std::move(rhs.evt_);
175 return *this;
176 }
177
182 bool is_message() const { return std::holds_alternative<const_message_ptr>(evt_); }
188 bool is_connected() const { return std::holds_alternative<connected_event>(evt_); }
194 bool is_connection_lost() const {
195 return std::holds_alternative<connection_lost_event>(evt_);
196 }
197
202 bool is_disconnected() const { return std::holds_alternative<disconnected_event>(evt_); }
208 bool is_shutdown() const { return std::holds_alternative<disconnected_event>(evt_); }
214 bool is_any_disconnect() const {
215 return std::holds_alternative<connection_lost_event>(evt_) ||
216 std::holds_alternative<disconnected_event>(evt_) ||
217 std::holds_alternative<shutdown_event>(evt_);
218 }
219
224 const_message_ptr get_message() { return std::get<const_message_ptr>(evt_); }
234 disconnected_event get_disconnected() { return std::get<disconnected_event>(evt_); }
241 constexpr std::add_pointer_t<const_message_ptr> get_message_if() noexcept {
242 return std::get_if<const_message_ptr>(&evt_);
243 }
244
253 constexpr std::add_pointer_t<disconnected_event> get_disconnected_if() noexcept {
254 return std::get_if<disconnected_event>(&evt_);
255 }
256};
257
259} // namespace mqtt
260
261#endif // __mqtt_event_h
bool is_message() const
Definition event.h:182
event(event &&evt)
Definition event.h:147
event(message_ptr msg)
Definition event.h:112
const_message_ptr get_message()
Definition event.h:224
std::variant< const_message_ptr, connected_event, connection_lost_event, disconnected_event, shutdown_event > event_type
Definition event.h:90
event & operator=(event_type evt)
Definition event.h:153
event(const event &evt)
Definition event.h:142
event(shutdown_event evt)
Definition event.h:137
bool is_shutdown() const
Definition event.h:208
constexpr std::add_pointer_t< const_message_ptr > get_message_if() noexcept
Definition event.h:241
event(disconnected_event evt)
Definition event.h:132
event(event_type evt)
Definition event.h:107
event(const_message_ptr msg)
Definition event.h:117
event & operator=(const event &rhs)
Definition event.h:162
bool is_disconnected() const
Definition event.h:202
bool is_any_disconnect() const
Definition event.h:214
event(connection_lost_event evt)
Definition event.h:127
event & operator=(event &&rhs)
Definition event.h:172
constexpr std::add_pointer_t< disconnected_event > get_disconnected_if() noexcept
Definition event.h:253
bool is_connected() const
Definition event.h:188
bool is_connection_lost() const
Definition event.h:194
event(connected_event evt)
Definition event.h:122
event()
Definition event.h:102
disconnected_event get_disconnected()
Definition event.h:234
Definition properties.h:293
Definition async_client.h:60
ReasonCode
Definition reason_code.h:39
message::const_ptr_t const_message_ptr
Definition message.h:372
message::ptr_t message_ptr
Definition message.h:369
Definition event.h:40
string cause
Definition event.h:41
Definition event.h:46
string cause
Definition event.h:47
Definition event.h:52
properties props
Definition event.h:53
ReasonCode reasonCode
Definition event.h:54
Definition event.h:59