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 | |
8 | QT_BEGIN_NAMESPACE |
9 | |
10 | namespace { |
11 | bool 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 | |
26 | class QQmlGrpcClientStreamSenderPrivate : public QObjectPrivate |
27 | { |
28 | public: |
29 | Q_DECLARE_PUBLIC(QQmlGrpcClientStreamSender) |
30 | explicit QQmlGrpcClientStreamSenderPrivate(QGrpcClientStream *stream) : m_stream(stream) { } |
31 | QGrpcClientStream *m_stream = nullptr; |
32 | }; |
33 | |
34 | QQmlGrpcClientStreamSender::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 | |
43 | QQmlGrpcClientStreamSender::~QQmlGrpcClientStreamSender() |
44 | = default; |
45 | |
46 | void 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 | |
59 | class QQmlGrpcBidiStreamSenderPrivate : public QObjectPrivate |
60 | { |
61 | public: |
62 | explicit QQmlGrpcBidiStreamSenderPrivate(QGrpcBidiStream *stream) : m_stream(stream) { } |
63 | QGrpcBidiStream *m_stream = nullptr; |
64 | }; |
65 | |
66 | QQmlGrpcBidiStreamSender::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 | |
75 | QQmlGrpcBidiStreamSender::~QQmlGrpcBidiStreamSender() |
76 | = default; |
77 | |
78 | void 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 | |
86 | QT_END_NAMESPACE |
87 | |
88 | #include "moc_qtqmlgrpcstreamsender.cpp" |
89 | |