SNode.C
Loading...
Searching...
No Matches
SocketContext.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_MQTTFAST_SOCKETCONTEXT_H
21#define IOT_MQTTFAST_SOCKETCONTEXT_H
22
23#include "core/socket/stream/SocketContext.h" // IWYU pragma: export
24#include "iot/mqtt-fast/ControlPacketFactory.h"
25#include "iot/mqtt-fast/Topic.h" // IWYU pragma: export
26#include "iot/mqtt-fast/packets/Connack.h" // IWYU pragma: export
27#include "iot/mqtt-fast/packets/Connect.h" // IWYU pragma: export
28#include "iot/mqtt-fast/packets/Disconnect.h" // IWYU pragma: export
29#include "iot/mqtt-fast/packets/Pingreq.h" // IWYU pragma: export
30#include "iot/mqtt-fast/packets/Pingresp.h" // IWYU pragma: export
31#include "iot/mqtt-fast/packets/Puback.h" // IWYU pragma: export
32#include "iot/mqtt-fast/packets/Pubcomp.h" // IWYU pragma: export
33#include "iot/mqtt-fast/packets/Publish.h" // IWYU pragma: export
34#include "iot/mqtt-fast/packets/Pubrec.h" // IWYU pragma: export
35#include "iot/mqtt-fast/packets/Pubrel.h" // IWYU pragma: export
36#include "iot/mqtt-fast/packets/Suback.h" // IWYU pragma: export
37#include "iot/mqtt-fast/packets/Subscribe.h" // IWYU pragma: export
38#include "iot/mqtt-fast/packets/Unsuback.h" // IWYU pragma: export
39#include "iot/mqtt-fast/packets/Unsubscribe.h" // IWYU pragma: export
40
41namespace core::socket::stream {
42 class SocketConnection;
43}
44
45namespace iot::mqtt_fast {
46 class ControlPacket;
47}
48
49#ifndef DOXYGEN_SHOULD_SKIP_THIS
50
51#include <cstddef>
52#include <cstdint>
53#include <list>
54#include <string>
55#include <vector>
56
57#endif // DOXYGEN_SHOULD_SKIP_THIS
58
59namespace iot::mqtt_fast {
60
61 class SocketContext : public core::socket::stream::SocketContext {
62 public:
63 explicit SocketContext(core::socket::stream::SocketConnection* socketConnection);
64
65 void sendConnect(const std::string& clientId);
66 void sendConnack(uint8_t returnCode, uint8_t flags);
67 void sendPublish(const std::string& topic, const std::string& message, bool dup = false, uint8_t qoS = 0, bool retain = false);
68 void sendPuback(uint16_t packetIdentifier);
69 void sendPubrec(uint16_t packetIdentifier);
70 void sendPubrel(uint16_t packetIdentifier);
71 void sendPubcomp(uint16_t packetIdentifier);
72 void sendSubscribe(std::list<Topic>& topics);
73 void sendSuback(uint16_t packetIdentifier, const std::list<uint8_t>& returnCodes);
74 void sendUnsubscribe(const std::list<std::string>& topics);
75 void sendUnsuback(uint16_t packetIdentifier);
76 void sendPingreq();
77 void sendPingresp();
78 void sendDisconnect();
79
80 private:
81 virtual void onConnect(const iot::mqtt_fast::packets::Connect& connect) = 0;
82 virtual void onConnack(const iot::mqtt_fast::packets::Connack& connack) = 0;
83 virtual void onPublish(const iot::mqtt_fast::packets::Publish& publish) = 0;
84 virtual void onPuback(const iot::mqtt_fast::packets::Puback& puback) = 0;
85 virtual void onPubrec(const iot::mqtt_fast::packets::Pubrec& pubrec) = 0;
86 virtual void onPubrel(const iot::mqtt_fast::packets::Pubrel& pubrel) = 0;
87 virtual void onPubcomp(const iot::mqtt_fast::packets::Pubcomp& pubcomp) = 0;
88 virtual void onSubscribe(const iot::mqtt_fast::packets::Subscribe& subscribe) = 0;
89 virtual void onSuback(const iot::mqtt_fast::packets::Suback& suback) = 0;
90 virtual void onUnsubscribe(const iot::mqtt_fast::packets::Unsubscribe& unsubscribe) = 0;
91 virtual void onUnsuback(const iot::mqtt_fast::packets::Unsuback& unsuback) = 0;
92 virtual void onPingreq(const iot::mqtt_fast::packets::Pingreq& pingreq) = 0;
93 virtual void onPingresp(const iot::mqtt_fast::packets::Pingresp& pingresp) = 0;
94 virtual void onDisconnect(const iot::mqtt_fast::packets::Disconnect& disconnect) = 0;
95
96 std::size_t onReceivedFromPeer() final;
97
98 void send(iot::mqtt_fast::ControlPacket&& controlPacket) const;
99 void send(iot::mqtt_fast::ControlPacket& controlPacket) const;
100 void send(std::vector<char>&& data) const;
101 static void printData(const std::vector<char>& data);
102
105
106 if (_packetIdentifier == 0) {
108 }
109
110 return _packetIdentifier;
111 }
112
114
115 uint16_t _packetIdentifier = 0;
116 };
117
118} // namespace iot::mqtt_fast
119
120#endif // IOT_MQTTFAST_SOCKETCONTEXT_H
void sendPubrel(uint16_t packetIdentifier)
virtual void onPubrel(const iot::mqtt_fast::packets::Pubrel &pubrel)=0
SocketContext(core::socket::stream::SocketConnection *socketConnection)
void sendPubrec(uint16_t packetIdentifier)
virtual void onSuback(const iot::mqtt_fast::packets::Suback &suback)=0
virtual void onPingresp(const iot::mqtt_fast::packets::Pingresp &pingresp)=0
virtual void onPubcomp(const iot::mqtt_fast::packets::Pubcomp &pubcomp)=0
virtual void onDisconnect(const iot::mqtt_fast::packets::Disconnect &disconnect)=0
virtual void onConnect(const iot::mqtt_fast::packets::Connect &connect)=0
virtual void onPuback(const iot::mqtt_fast::packets::Puback &puback)=0
iot::mqtt_fast::ControlPacketFactory controlPacketFactory
void sendPubcomp(uint16_t packetIdentifier)
void sendConnect(const std::string &clientId)
void sendSuback(uint16_t packetIdentifier, const std::list< uint8_t > &returnCodes)
void send(iot::mqtt_fast::ControlPacket &controlPacket) const
void sendUnsuback(uint16_t packetIdentifier)
void sendUnsubscribe(const std::list< std::string > &topics)
void sendSubscribe(std::list< Topic > &topics)
void sendPublish(const std::string &topic, const std::string &message, bool dup=false, uint8_t qoS=0, bool retain=false)
virtual void onUnsuback(const iot::mqtt_fast::packets::Unsuback &unsuback)=0
virtual void onSubscribe(const iot::mqtt_fast::packets::Subscribe &subscribe)=0
void sendPuback(uint16_t packetIdentifier)
virtual void onConnack(const iot::mqtt_fast::packets::Connack &connack)=0
void send(std::vector< char > &&data) const
static void printData(const std::vector< char > &data)
virtual void onUnsubscribe(const iot::mqtt_fast::packets::Unsubscribe &unsubscribe)=0
virtual void onPubrec(const iot::mqtt_fast::packets::Pubrec &pubrec)=0
virtual void onPublish(const iot::mqtt_fast::packets::Publish &publish)=0
std::size_t onReceivedFromPeer() final
void send(iot::mqtt_fast::ControlPacket &&controlPacket) const
void sendConnack(uint8_t returnCode, uint8_t flags)
virtual void onPingreq(const iot::mqtt_fast::packets::Pingreq &pingreq)=0
#define MQTT_CONNACK
Definition Connack.h:35
#define MQTT_CONNECT
Definition Connect.h:36
#define MQTT_DISCONNECT
Definition Disconnect.h:33
#define MQTT_PINGREQ
Definition Pingreq.h:33
#define MQTT_PINGRESP
Definition Pingresp.h:33
#define MQTT_PUBACK
Definition Puback.h:35
#define MQTT_PUBCOMP
Definition Pubcomp.h:35
#define MQTT_PUBLISH
Definition Publish.h:36
#define MQTT_PUBREC
Definition Pubrec.h:35
#define MQTT_PUBREL
Definition Pubrel.h:35
#define MQTT_SUBACK
Definition Suback.h:36
#define MQTT_SUBSCRIBE
Definition Subscribe.h:37
#define MQTT_UNSUBACK
Definition Unsuback.h:35
#define MQTT_UNSUBSCRIBE
Definition Unsubscribe.h:37