Как Qt и gRPC заставить работать вместе? В чем идея постоения архитектуры? Опыты провожу на helloworld отсюда https://github.com/plasticbox/grpc-windows/tree/master/grpc_helloworld/src
Попытка первая, просто попробовать добавить синнал
class GreeterServiceImpl final : public Greeter::Service, public QObject {
Q_OBJECT
public:
Status SayHello(ServerContext* context, const HelloRequest* request, HelloReply* reply) override {
std::string prefix("Hello ");
reply->set_message(prefix + request->name());
emit message();
return Status::OK;
}
signals:
void message();
};
In function `GreeterServiceImpl::GreeterServiceImpl()':
error: undefined reference to `vtable for GreeterServiceImpl'
In function `GreeterServiceImpl::~GreeterServiceImpl()':
error: undefined reference to `vtable for GreeterServiceImpl'
error: collect2: error: ld returned 1 exit status
Добавляем конструктор
explicit GreeterServiceImp(QObject *parent=nullptr) : QObject(parent) {}
Потытка вторая, связана с программированием на Qt внутри gRPC методов, и тоже не приводит к успеху
Status SayHello(ServerContext* context, const HelloRequest* request, HelloReply* reply) override {
QSslSocket mSocket;
QSslConfiguration config = mSocket.sslConfiguration();
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::SecureProtocols);
mSocket.setSslConfiguration(config);
mSocket.connectToHostEncrypted("google.com", 8080);
std::string prefix("Hello ");
reply->set_message(prefix + request->name());
emit message();
return Status::OK;
}
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QSslSocket(0x5598fd195520), parent's thread is QThread(0x5598fd18e800), current thread is QThread(0x7f3a30004510)