#pragma once #include #include #include #include #include #include "packets/AudioPacket.hpp" // TODO(Faraphel): should be moved somewhere else struct AudioPacketsComparator { bool operator() (const AudioPacket &a, const AudioPacket &b) const { return a.timePlay > b.timePlay; } }; class Client { public: explicit Client(int channels, double rate); ~Client(); void loop(); private: void loopReceiver(); void loopPlayer(); PaStream* stream; int channels; std::priority_queue, AudioPacketsComparator> audioQueue; std::mutex audioMutex; std::unique_lock audioLock; std::condition_variable audioCondition; std::thread receiverThread; std::thread playerThread; };