#ifndef INCLUDE_DI_RPC_ASYNCREADER_H_ #define INCLUDE_DI_RPC_ASYNCREADER_H_ #include #include #include #include #include #include #include #include #include #include namespace Di { namespace Rpc { class AsyncReader : public Reader { public: AsyncReader(); ~AsyncReader(); di_errno_t queueAsync(std::shared_ptr msg); di_errno_t checkAsyncStatus(std::shared_ptr msg); std::shared_ptr getAsyncReply(std::shared_ptr msg); private: Di::Mailbox __requestQueue; std::unordered_map> __replyQueue; std::unordered_map __queueTimeout; std::mutex __replyQueueLock; std::shared_ptr __asyncWorker; bool __workerRunning; std::string __createMapKey(const std::shared_ptr &msg); void __worker(void); }; } // namespace Rpc } // namespace Di #endif // INCLUDE_DI_RPC_ASYNCREADER_H_