#pragma once #include #include #include #include #include #include class IReaderCallback; class Ipc : public std::enable_shared_from_this{ public: static std::shared_ptr create(const char* reader_name, const char* writer_name); public: virtual ~Ipc(); bool listen(); void stop(); bool send(const char* data, unsigned int size); bool isConnected(); void reConnect(); void registReadCallback(const std::shared_ptr& reader); void unregistReadCallback(const std::shared_ptr& reader); protected: Ipc(const char* reader_name, const char* writer_name) noexcept; private: void doReciver(std::weak_ptr wThis); void onReciveer(const char* buffer, unsigned int size); std::string toUtf8(const std::string& str); private: std::string reader_name_; std::string writer_name_; std::unique_ptr sender_; std::unique_ptr receiver_; std::thread reciver_thread_; std::atomic_bool reciver_stop_{true}; std::mutex mutex_; using ReaderCallbackList = std::vector>; ReaderCallbackList reader_callbacks_; };