#ifndef DPLITE_SENDQUEUE_HPP #define DPLITE_SENDQUEUE_HPP #include #include #include #include #include #include class SendQueue { public: enum SendPriority { SEND_PRI_LOW = 1, SEND_PRI_MEDIUM = 2, SEND_PRI_HIGH = 4, }; class Buffer { private: std::vector data; struct sockaddr_storage dest_addr; int dest_addr_len; protected: Buffer(const void *data, size_t data_size, const struct sockaddr *dest_addr = NULL, int dest_addr_len = 0); public: virtual ~Buffer(); std::pair get_data(); std::pair get_dest_addr(); virtual void complete(HRESULT result) = 0; }; private: std::list low_queue; std::list medium_queue; std::list high_queue; Buffer *current; public: SendQueue(): current(NULL) {} /* No copy c'tor. */ SendQueue(const SendQueue &src) = delete; void send(SendPriority priority, Buffer *buffer); Buffer *get_next(); void complete(Buffer *buffer, HRESULT result); }; #endif /* !DPLITE_SENDQUEUE_HPP */