mirror of https://github.com/qt/qtgrpc.git
55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
|
|
// Copyright (C) 2024 The Qt Company Ltd.
|
||
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||
|
|
|
||
|
|
#include "navithread.h"
|
||
|
|
#include <naviservice_client.grpc.qpb.h>
|
||
|
|
|
||
|
|
#include <QtCore/QDebug>
|
||
|
|
#include <QtCore/QUrl>
|
||
|
|
#include <QtGrpc/QGrpcChannelOptions>
|
||
|
|
#include <QtGrpc/QGrpcHttp2Channel>
|
||
|
|
|
||
|
|
using namespace qtgrpc::examples;
|
||
|
|
using namespace google::protobuf;
|
||
|
|
NaviThread::NaviThread(QObject *parent) : QThread(parent)
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
NaviThread::~NaviThread() = default;
|
||
|
|
|
||
|
|
void NaviThread::run()
|
||
|
|
{
|
||
|
|
if (!m_client) {
|
||
|
|
auto channel = std::shared_ptr<
|
||
|
|
QAbstractGrpcChannel>(new QGrpcHttp2Channel(QGrpcChannelOptions{
|
||
|
|
QUrl("http://localhost:50051", QUrl::StrictMode) }));
|
||
|
|
m_client = std::make_shared<qtgrpc::examples::NaviService::Client>();
|
||
|
|
m_client->attachChannel(channel);
|
||
|
|
}
|
||
|
|
|
||
|
|
Empty request;
|
||
|
|
m_stream = m_client->streamGetNaviStream(request);
|
||
|
|
connect(m_stream.get(), &QGrpcServerStream::messageReceived, this, [this] {
|
||
|
|
DistanceMsg result = m_stream->read<DistanceMsg>();
|
||
|
|
emit totalDistanceChanged(result.totalDistance());
|
||
|
|
emit remainingDistanceChanged(result.remainingDistance());
|
||
|
|
emit directionChanged(result.direction());
|
||
|
|
});
|
||
|
|
|
||
|
|
connect(m_stream.get(), &QGrpcServerStream::errorOccurred, this,
|
||
|
|
[this](const QGrpcStatus &status) {
|
||
|
|
emit totalDistanceChanged(0);
|
||
|
|
emit remainingDistanceChanged(0);
|
||
|
|
emit directionChanged(DirectionEnumGadget::BACKWARD);
|
||
|
|
qWarning() << "Stream error(" << status.code() << "):" << status.message();
|
||
|
|
});
|
||
|
|
|
||
|
|
connect(m_stream.get(), &QGrpcServerStream::finished, this, [this] {
|
||
|
|
emit totalDistanceChanged(0);
|
||
|
|
emit remainingDistanceChanged(0);
|
||
|
|
emit directionChanged(DirectionEnumGadget::BACKWARD);
|
||
|
|
});
|
||
|
|
|
||
|
|
QThread::run();
|
||
|
|
}
|