#ifndef CONNECTIONBASE_H #define CONNECTIONBASE_H #include #include #include #include "message.h" class ConnectionBase { private: std::queue recv_queue; Message::Type pending_type; std::size_t pending_size; //! Create a new message and initiate reception. void prepare_next_message(); protected: //! Signal that connection is established and ready to transfer data. void connected(); //! Deliver received data. //! \param data Pointer to received data. Ownership is retained by caller. //! \param bytes Size of data. void got_data(uint8_t* data, std::size_t bytes); //! Called to request data. //! \param bytes Amount of data requested. virtual void request_data(std::size_t bytes) = 0; //! Called to write data. //! \param data Pointer to data to send. Ownership is transferred to callee. //! \param bytes Size of data. virtual void write_data(uint8_t* data, std::size_t bytes) = 0; public: ConnectionBase(); virtual ~ConnectionBase(); //! Send a message. void send(const Message::p& msg); //! Get received message or null if queue empty. Message::p recv(); }; #endif