35 lines
933 B
C++
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;
|
|
};
|