SNode.C
Loading...
Searching...
No Matches
Broker.h
Go to the documentation of this file.
1/*
2 * SNode.C - a slim toolkit for network communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef IOT_MQTT_SERVER_BROKER_BROKER_H
21#define IOT_MQTT_SERVER_BROKER_BROKER_H
22
23#include "iot/mqtt/server/broker/RetainTree.h"
24#include "iot/mqtt/server/broker/Session.h" // IWYU pragma: export
25#include "iot/mqtt/server/broker/SubscribtionTree.h"
26
27namespace iot::mqtt::server {
28 class Mqtt;
29} // namespace iot::mqtt::server
30
31#ifndef DOXYGEN_SHOULD_SKIP_THIS
32
33#include <cstdint>
34#include <map>
35#include <memory>
36#include <string>
37
38#endif // DOXYGEN_SHOULD_SKIP_THIS
39
40#define SUBSCRIBTION_MAX_QOS 0x02
41
42#define SUBSCRIBTION_SUCCESS 0x00
43#define SUBSCRIBTION_FAILURE 0x80
44
45namespace iot::mqtt::server::broker {
46
47 class Broker {
48 public:
49 explicit Broker(uint8_t maxQoS);
50
51 ~Broker();
52
53 static std::shared_ptr<Broker> instance(uint8_t maxQoS);
54
55 void appear(const std::string& clientId, const std::string& topic, uint8_t qoS);
56 void unsubscribe(const std::string& clientId);
57
58 void publish(const std::string& originClientId, const std::string& topic, const std::string& message, uint8_t qoS, bool retain);
59 uint8_t subscribe(const std::string& clientId, const std::string& topic, uint8_t qoS);
60 void unsubscribe(const std::string& clientId, const std::string& topic);
61
62 bool hasSession(const std::string& clientId);
63 bool hasActiveSession(const std::string& clientId);
64 bool hasRetainedSession(const std::string& clientId);
65
66 bool isActiveSession(const std::string& clientId, const Mqtt* mqtt);
67
68 Session* newSession(const std::string& clientId, iot::mqtt::server::Mqtt* mqtt);
69 Session* renewSession(const std::string& clientId, iot::mqtt::server::Mqtt* mqtt);
70 void restartSession(const std::string& clientId);
71 void retainSession(const std::string& clientId);
72 void deleteSession(const std::string& clientId);
73
74 void sendPublish(const std::string& clientId, Message& message, uint8_t qoS, bool retain);
75
76 private:
78 uint8_t maxQoS;
79
81 iot::mqtt::server::broker::RetainTree retainTree;
82
84 };
85
86} // namespace iot::mqtt::server::broker
87
88#endif // IOT_MQTT_SERVER_BROKER_BROKER_H
#define SUBSCRIBTION_MAX_QOS
Definition Broker.h:40
virtual core::socket::stream::SocketContext * create(core::socket::stream::SocketConnection *socketConnection, std::shared_ptr< iot::mqtt::server::broker::Broker > broker)=0
core::socket::stream::SocketContext * create(core::socket::stream::SocketConnection *socketConnection) final
void restartSession(const std::string &clientId)
Definition Broker.cpp:187
uint8_t subscribe(const std::string &clientId, const std::string &topic, uint8_t qoS)
Definition Broker.cpp:142
bool hasActiveSession(const std::string &clientId)
Definition Broker.cpp:165
static std::shared_ptr< Broker > instance(uint8_t maxQoS)
Definition Broker.cpp:119
bool isActiveSession(const std::string &clientId, const Mqtt *mqtt)
Definition Broker.cpp:173
iot::mqtt::server::broker::RetainTree retainTree
Definition Broker.h:81
void publish(const std::string &originClientId, const std::string &topic, const std::string &message, uint8_t qoS, bool retain)
Definition Broker.cpp:134
bool hasSession(const std::string &clientId)
Definition Broker.cpp:161
void appear(const std::string &clientId, const std::string &topic, uint8_t qoS)
Definition Broker.cpp:125
void unsubscribe(const std::string &clientId, const std::string &topic)
Definition Broker.cpp:157
Session * renewSession(const std::string &clientId, iot::mqtt::server::Mqtt *mqtt)
Definition Broker.cpp:183
void deleteSession(const std::string &clientId)
Definition Broker.cpp:199
void unsubscribe(const std::string &clientId)
Definition Broker.cpp:129
bool hasRetainedSession(const std::string &clientId)
Definition Broker.cpp:169
iot::mqtt::server::broker::SubscribtionTree subscribtionTree
Definition Broker.h:80
Session * newSession(const std::string &clientId, iot::mqtt::server::Mqtt *mqtt)
Definition Broker.cpp:177
void sendPublish(const std::string &clientId, Message &message, uint8_t qoS, bool retain)
Definition Broker.cpp:204
void retainSession(const std::string &clientId)
Definition Broker.cpp:195