8
8
// namespace arduino { // namespace net { namespace mqtt {
9
9
typedef int error_t ; // TODO move this to be generally available
10
10
11
- class IStream {
12
- public:
13
- virtual ~IStream () = default ;
14
-
15
- virtual int available () = 0;
16
- virtual int read () = 0;
17
- // virtual int peek() = 0;
18
- virtual size_t readBytes (uint8_t *buffer, size_t length) = 0; // read chars from stream into buffer
19
- };
20
-
21
- class MqttOStream { // if OStream becomes available in arduino core api, we still need to extend its definition
22
- public:
23
- MqttOStream (error_t rc=0 ): rc(rc) {}
24
- virtual ~MqttOStream () = default ;
25
-
26
- virtual size_t write (uint8_t ) = 0;
27
- virtual size_t write (const uint8_t *buffer, size_t size) = 0;
28
- virtual int availableForWrite () = 0;
29
-
30
- const error_t rc;
31
- };
32
-
33
11
using Topic = const char * const ;
34
12
35
13
#if defined(__has_include)
@@ -38,10 +16,10 @@ using Topic = const char* const;
38
16
#include < functional>
39
17
40
18
// for incoming published messages
41
- using MqttReceiveCallback = std::function<void (Topic, IStream& )>;
19
+ using MqttReceiveCallback = std::function<void (Topic)>;
42
20
#endif
43
21
#else
44
- typedef void (*MqttReceiveCallback)(Topic, IStream& )>;
22
+ typedef void (*MqttReceiveCallback)(Topic)>;
45
23
#endif
46
24
47
25
// TODO MQTT 5.0 stuff
@@ -112,16 +90,6 @@ class MqttClientInterface {
112
90
size_t size, MqttQos qos = QosDefault,
113
91
MqttPublishFlag flags = MqttPublishFlags::None) = 0;
114
92
115
- /* *
116
- * Publish method for publishing messages in "streaming mode", meaning that
117
- * they can outsize the available ram. The OStream returned handles the lifecycle of
118
- * an mqtt Message, from the opening header to its termaination.
119
- * The concrete OStream is defined by the implementation
120
- */
121
- virtual MqttOStream&& publish(
122
- Topic t, MqttQos qos = QosDefault,
123
- MqttPublishFlag flags = MqttPublishFlags::None) = 0 ;
124
-
125
93
virtual error_t unsubscribe (Topic t) = 0;
126
94
virtual void poll () = 0;
127
95
virtual error_t ping () = 0;
@@ -145,4 +113,16 @@ class MqttClientInterface {
145
113
// virtual void setClient(Client&) = 0;
146
114
// Could this be a better solution?
147
115
// virtual void setClient(Client&&) = 0;
116
+
117
+ virtual int read () = 0;
118
+ virtual int read (uint8_t payload[], size_t size) = 0;
119
+ virtual int available () = 0;
120
+
121
+ // The following methods should return the current rx message parameters.
122
+ // FIXME what if none?
123
+ virtual String messageTopic () const = 0;
124
+ virtual int messageDup () const = 0;
125
+ virtual uint16_t messageId () const = 0;
126
+ virtual MqttQos messageQoS () const = 0;
127
+ virtual int messageRetain () const = 0;
148
128
};
0 commit comments