#ifndef QOSPACKETQUEUE_H #define QOSPACKETQUEUE_H #include "list" #include "forward_declarations.h" #include "types.h" #include "publishcopyfactory.h" /** * @brief The QueuedPublish class wraps the publish with a packet id. * * We don't want to store the packet id in the Publish object, because the packet id is determined/tracked per client/session. */ class QueuedPublish { Publish publish; uint16_t packet_id = 0; public: QueuedPublish(Publish &&publish, uint16_t packet_id); size_t getApproximateMemoryFootprint() const; uint16_t getPacketId() const; Publish &getPublish(); }; class QoSPublishQueue { std::list queue; // Using list because it's easiest to maintain order [MQTT-4.6.0-6] ssize_t qosQueueBytes = 0; public: void erase(const uint16_t packet_id); std::list::iterator erase(std::list::iterator pos); size_t size() const; size_t getByteSize() const; void queuePublish(PublishCopyFactory ©Factory, uint16_t id, char new_max_qos); void queuePublish(Publish &&pub, uint16_t id); std::list::iterator begin(); std::list::iterator end(); }; #endif // QOSPACKETQUEUE_H