mirror of https://github.com/qt/qtgrpc.git
69 lines
2.2 KiB
C++
69 lines
2.2 KiB
C++
|
// Copyright (C) 2024 The Qt Company Ltd.
|
||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||
|
|
||
|
#include "navigationthread.h"
|
||
|
#include <navigationservice_client.grpc.qpb.h>
|
||
|
|
||
|
#include <QtCore/QDebug>
|
||
|
#include <QtCore/QUrl>
|
||
|
#include <QtGrpc/QGrpcChannelOptions>
|
||
|
#include <QtGrpc/QGrpcHttp2Channel>
|
||
|
|
||
|
using namespace qtgrpc::examples;
|
||
|
using namespace google::protobuf;
|
||
|
|
||
|
NavigationThread::NavigationThread(QObject *parent) : QThread(parent)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
NavigationThread::~NavigationThread() = default;
|
||
|
|
||
|
void NavigationThread::run()
|
||
|
{
|
||
|
if (!m_client) {
|
||
|
auto channel = std::shared_ptr<
|
||
|
QAbstractGrpcChannel>(new QGrpcHttp2Channel(QUrl("http://localhost:50051",
|
||
|
QUrl::StrictMode)));
|
||
|
m_client = std::make_shared<qtgrpc::examples::NavigationService::Client>();
|
||
|
m_client->attachChannel(channel);
|
||
|
}
|
||
|
|
||
|
Empty request;
|
||
|
m_stream = m_client->getNavigationStream(request);
|
||
|
|
||
|
connect(m_stream.get(), &QGrpcServerStream::messageReceived, this, [this] {
|
||
|
const auto result = m_stream->read<NavigationMsg>();
|
||
|
if (!result)
|
||
|
return;
|
||
|
|
||
|
emit totalDistanceChanged(result->totalDistance());
|
||
|
emit traveledDistanceChanged(result->traveledDistance());
|
||
|
emit directionChanged(result->direction());
|
||
|
emit streetChanged(result->street());
|
||
|
});
|
||
|
|
||
|
connect(
|
||
|
m_stream.get(), &QGrpcServerStream::finished, this,
|
||
|
[this](const QGrpcStatus &status) {
|
||
|
if (!status.isOk()) {
|
||
|
auto error = QString("Stream error fetching navigation %1 (%2)")
|
||
|
.arg(status.message())
|
||
|
.arg(QVariant::fromValue(status.code()).toString());
|
||
|
emit connectionError(error);
|
||
|
qWarning() << error;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
emit totalDistanceChanged(0);
|
||
|
emit traveledDistanceChanged(0);
|
||
|
emit directionChanged(DirectionEnumGadget::DirectionEnum::BACKWARD);
|
||
|
m_stream.reset();
|
||
|
},
|
||
|
Qt::SingleShotConnection);
|
||
|
|
||
|
QThread::run();
|
||
|
|
||
|
// Delete the NavigationService::Client object to shut down the connection
|
||
|
m_client.reset();
|
||
|
}
|