88// namespace arduino { // namespace net { namespace mqtt {
99typedef int error_t ; // TODO move this to be generally available
1010
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-
3311using Topic = const char * const ;
3412
3513#if defined(__has_include)
@@ -38,10 +16,10 @@ using Topic = const char* const;
3816 #include < functional>
3917
4018 // for incoming published messages
41- using MqttReceiveCallback = std::function<void (Topic, IStream& )>;
19+ using MqttReceiveCallback = std::function<void (Topic)>;
4220 #endif
4321#else
44- typedef void (*MqttReceiveCallback)(Topic, IStream& )>;
22+ typedef void (*MqttReceiveCallback)(Topic)>;
4523#endif
4624
4725// TODO MQTT 5.0 stuff
@@ -112,16 +90,6 @@ class MqttClientInterface {
11290 size_t size, MqttQos qos = QosDefault,
11391 MqttPublishFlag flags = MqttPublishFlags::None) = 0;
11492
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-
12593 virtual error_t unsubscribe (Topic t) = 0;
12694 virtual void poll () = 0;
12795 virtual error_t ping () = 0;
@@ -145,4 +113,16 @@ class MqttClientInterface {
145113 // virtual void setClient(Client&) = 0;
146114 // Could this be a better solution?
147115 // 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;
148128};
0 commit comments