1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include <QtGrpcQuick/qtqmlgrpcstreamsender.h>
5
6#include <QtCore/private/qobject_p.h>
7
8QT_BEGIN_NAMESPACE
9
10namespace {
11bool isValidStream(const QGrpcOperation *stream)
12{
13 if (!stream || stream->isFinished()) {
14 qWarning(msg: "Unable to write message; stream is finished");
15 return false;
16 }
17 return true;
18}
19}
20
21/*!
22 \class QQmlGrpcClientStreamSender
23 \internal
24*/
25
26class QQmlGrpcClientStreamSenderPrivate : public QObjectPrivate
27{
28public:
29 Q_DECLARE_PUBLIC(QQmlGrpcClientStreamSender)
30 explicit QQmlGrpcClientStreamSenderPrivate(QGrpcClientStream *stream) : m_stream(stream) { }
31 QGrpcClientStream *m_stream = nullptr;
32};
33
34QQmlGrpcClientStreamSender::QQmlGrpcClientStreamSender(QGrpcClientStream *stream, QObject *parent)
35 : QObject(*new QQmlGrpcClientStreamSenderPrivate(stream), parent)
36{
37 QObject::connect(sender: stream, signal: &QObject::destroyed, context: this, slot: [this]() {
38 Q_D(QQmlGrpcClientStreamSender);
39 d->m_stream = nullptr;
40 });
41}
42
43QQmlGrpcClientStreamSender::~QQmlGrpcClientStreamSender()
44 = default;
45
46void QQmlGrpcClientStreamSender::writeMessageImpl(const QProtobufMessage &message) const
47{
48 Q_D(const QQmlGrpcClientStreamSender);
49 if (!isValidStream(stream: d->m_stream))
50 return;
51 d->m_stream->writeMessage(message);
52}
53
54/*!
55 \class QQmlGrpcBidiStreamSender
56 \internal
57*/
58
59class QQmlGrpcBidiStreamSenderPrivate : public QObjectPrivate
60{
61public:
62 explicit QQmlGrpcBidiStreamSenderPrivate(QGrpcBidiStream *stream) : m_stream(stream) { }
63 QGrpcBidiStream *m_stream = nullptr;
64};
65
66QQmlGrpcBidiStreamSender::QQmlGrpcBidiStreamSender(QGrpcBidiStream *stream, QObject *parent)
67 : QObject(*new QQmlGrpcBidiStreamSenderPrivate(stream), parent)
68{
69 QObject::connect(sender: stream, signal: &QObject::destroyed, context: this, slot: [this]() {
70 Q_D(QQmlGrpcBidiStreamSender);
71 d->m_stream = nullptr;
72 });
73}
74
75QQmlGrpcBidiStreamSender::~QQmlGrpcBidiStreamSender()
76 = default;
77
78void QQmlGrpcBidiStreamSender::writeMessageImpl(const QProtobufMessage &message) const
79{
80 Q_D(const QQmlGrpcBidiStreamSender);
81 if (!isValidStream(stream: d->m_stream))
82 return;
83 d->m_stream->writeMessage(message);
84}
85
86QT_END_NAMESPACE
87
88#include "moc_qtqmlgrpcstreamsender.cpp"
89

Provided by KDAB

Privacy Policy
Start learning QML with our Intro Training
Find out more

source code of qtgrpc/src/grpcquick/qtqmlgrpcstreamsender.cpp