#ifndef __ICOMMUNICATION_H_ #define __ICOMMUNICATION_H_ #include #include #include #include #include "icsneo/third-party/concurrentqueue/blockingconcurrentqueue.h" namespace icsneo { class ICommunication { public: virtual ~ICommunication() {} virtual bool open() = 0; virtual bool isOpen() = 0; virtual bool close() = 0; virtual bool read(std::vector& bytes, size_t limit = 0); virtual bool readWait(std::vector& bytes, std::chrono::milliseconds timeout = std::chrono::milliseconds(100), size_t limit = 0); virtual bool write(const std::vector& bytes); protected: class WriteOperation { public: WriteOperation() {} WriteOperation(std::vector b) { bytes = b; } std::vector bytes; }; enum IOTaskState { LAUNCH, WAIT }; virtual void readTask() = 0; virtual void writeTask() = 0; moodycamel::BlockingConcurrentQueue readQueue; moodycamel::BlockingConcurrentQueue writeQueue; std::thread readThread, writeThread; std::atomic closing{false}; }; } #endif