#pragma once #include "logic/message_handler.h" #include "messages.pb.h" #include "services.grpc.pb.h" #include #include #include #include #include class Reactor : public QObject, public grpc::ClientBidiReactor { Q_OBJECT public: explicit Reactor(chat::Chat::Stub *); void OnWriteDone(bool ok) override; void OnReadDone(bool ok) override; void OnDone(const grpc::Status &s) override; grpc::Status Await(); void SendMessage(const chat::chatMsg &msg); bool IsConnected() const; std::shared_ptr getHandler(); private: chat::Chat::Stub *m_stub; grpc::ClientContext m_context; chat::chatMsg m_msg; std::shared_ptr m_handler; std::mutex m_mutex; std::condition_variable m_cv; bool m_done = false; grpc::Status m_status; };