Files
grpc_chat_cpp/client/inc/logic/client_reactor.h

35 lines
933 B
C++

#pragma once
#include "logic/message_handler.h"
#include "messages.pb.h"
#include "services.grpc.pb.h"
#include <QObject>
#include <condition_variable>
#include <grpcpp/support/client_callback.h>
#include <grpcpp/support/status.h>
#include <memory>
class Reactor : public QObject,
public grpc::ClientBidiReactor<chat::chatMsg, chat::chatMsg> {
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<MessageHandler> getHandler();
private:
chat::Chat::Stub *m_stub;
grpc::ClientContext m_context;
chat::chatMsg m_msg;
std::shared_ptr<MessageHandler> m_handler;
std::mutex m_mutex;
std::condition_variable m_cv;
bool m_done = false;
grpc::Status m_status;
};