Skip to content

Commit c618516

Browse files
committed
Rename QGrpcSubscription to QGrpcStream
- Replace 'subscription' term with the 'stream' across the project - Rename the 'updated' signal of QGrpcSubscription to 'messageReceived' - Remove 'Updates' suffix from the generated stream subscribe method names. - Update QML gRPC tests. Use unique message identifiers.
1 parent 7eeb291 commit c618516

26 files changed

+286
-282
lines changed

examples/addressbook/addressbookengine.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ AddressBookEngine::AddressBookEngine() : QObject()
5656
std::shared_ptr<QtProtobuf::QAbstractGrpcChannel> channel(new QtProtobuf::QGrpcHttp2Channel(QUrl("https://localhost:65001"), QtProtobuf::QGrpcSslCredentials(conf) |
5757
QtProtobuf::QGrpcUserPasswordCredentials<>("authorizedUser", QCryptographicHash::hash("test", QCryptographicHash::Md5).toHex())));
5858
m_client->attachChannel(channel);
59-
auto subscription = m_client->subscribeContactsUpdates(ListFrame());
60-
connect(subscription.get(), &QtProtobuf::QGrpcSubscription::updated, this, [this, subscription]() {
61-
m_contacts->reset(subscription->read<Contacts>().list());
59+
auto stream = m_client->subscribeContacts(ListFrame());
60+
connect(stream.get(), &QtProtobuf::QGrpcStream::messageReceived, this, [this, stream]() {
61+
m_contacts->reset(stream->read<Contacts>().list());
6262
});
63-
m_client->subscribeCallStatusUpdates(qtprotobuf::examples::None(), QPointer<CallStatus>(&m_callStatus));
63+
m_client->subscribeCallStatus(qtprotobuf::examples::None(), QPointer<CallStatus>(&m_callStatus));
6464
}
6565

6666
void AddressBookEngine::addContact(qtprotobuf::examples::Contact *contact)

examples/simplechat/simplechatengine.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,18 @@ void SimpleChatEngine::login(const QString &name, const QString &password)
7373
QtProtobuf::QGrpcUserPasswordCredentials<>(name, QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Md5).toHex())));
7474

7575
m_client->attachChannel(channel);
76-
QtProtobuf::QGrpcSubscriptionShared subscription = m_client->subscribeMessageListUpdates(None());
77-
QObject::connect(subscription.get(), &QtProtobuf::QGrpcSubscription::error, this, [subscription] {
78-
qCritical() << "Subscription error, cancel";
79-
subscription->cancel();
76+
QtProtobuf::QGrpcStreamShared stream = m_client->subscribeMessageList(None());
77+
QObject::connect(stream.get(), &QtProtobuf::QGrpcStream::error, this, [stream] {
78+
qCritical() << "Stream error, cancel";
79+
stream->cancel();
8080
});
81-
QObject::connect(subscription.get(), &QtProtobuf::QGrpcSubscription::updated, this, [this, name, subscription]() {
81+
QObject::connect(stream.get(), &QtProtobuf::QGrpcStream::messageReceived, this, [this, name, stream]() {
8282
if (m_userName != name) {
8383
m_userName = name;
8484
userNameChanged();
8585
loggedIn();
8686
}
87-
m_messages.reset(subscription->read<qtprotobuf::examples::ChatMessages>().messages());
87+
m_messages.reset(stream->read<qtprotobuf::examples::ChatMessages>().messages());
8888
});
8989
}
9090

src/generator/clientdeclarationprinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void ClientDeclarationPrinter::printClientIncludes()
6666
std::unordered_set<std::string> includeSet;
6767
includeSet.insert("QAbstractGrpcClient");
6868
includeSet.insert("QGrpcAsyncReply");
69-
includeSet.insert("QGrpcSubscription");
69+
includeSet.insert("QGrpcStream");
7070
for (auto type : includeSet) {
7171
mPrinter->Print({{"include", type}}, Templates::ExternalIncludeTemplate);
7272
}

src/generator/singlefilegenerator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ bool SingleFileGenerator::GenerateServices(const ::google::protobuf::FileDescrip
211211

212212
externalIncludes.insert("QAbstractGrpcClient");
213213
externalIncludes.insert("QGrpcAsyncReply");
214-
externalIncludes.insert("QGrpcSubscription");
214+
externalIncludes.insert("QGrpcStream");
215215

216216
if (file->message_type_count() > 0) {
217217
internalIncludes.insert(basename + Templates::ProtoFileSuffix);

src/generator/templates.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -378,19 +378,19 @@ const char *Templates::QmlRegisterEnumTypeTemplate = "qmlRegisterUncreatableType
378378

379379

380380
const char *Templates::ClientMethodSignalDeclarationTemplate = "Q_SIGNAL void $method_name$Updated(const $return_type$ &);\n";
381-
const char *Templates::ClientMethodServerStreamDeclarationTemplate = "QtProtobuf::QGrpcSubscriptionShared subscribe$method_name_upper$Updates(const $param_type$ &$param_name$);\n";
382-
const char *Templates::ClientMethodServerStream2DeclarationTemplate = "QtProtobuf::QGrpcSubscriptionShared subscribe$method_name_upper$Updates(const $param_type$ &$param_name$, const QPointer<$return_type$> &$return_name$);\n";
383-
const char *Templates::ClientMethodServerStreamQmlDeclarationTemplate = "Q_INVOKABLE QtProtobuf::QGrpcSubscriptionShared qmlSubscribe$method_name_upper$Updates_p($param_type$ *$param_name$, $return_type$ *$return_name$);\n";
381+
const char *Templates::ClientMethodServerStreamDeclarationTemplate = "QtProtobuf::QGrpcStreamShared subscribe$method_name_upper$(const $param_type$ &$param_name$);\n";
382+
const char *Templates::ClientMethodServerStream2DeclarationTemplate = "QtProtobuf::QGrpcStreamShared subscribe$method_name_upper$(const $param_type$ &$param_name$, const QPointer<$return_type$> &$return_name$);\n";
383+
const char *Templates::ClientMethodServerStreamQmlDeclarationTemplate = "Q_INVOKABLE QtProtobuf::QGrpcStreamShared qmlSubscribe$method_name_upper$_p($param_type$ *$param_name$, $return_type$ *$return_name$);\n";
384384

385-
const char *Templates::ClientMethodServerStreamDefinitionTemplate = "QtProtobuf::QGrpcSubscriptionShared $classname$::subscribe$method_name_upper$Updates(const $param_type$ &$param_name$)\n"
385+
const char *Templates::ClientMethodServerStreamDefinitionTemplate = "QtProtobuf::QGrpcStreamShared $classname$::subscribe$method_name_upper$(const $param_type$ &$param_name$)\n"
386386
"{\n"
387387
" return subscribe(\"$method_name$\", $param_name$);\n"
388388
"}\n";
389-
const char *Templates::ClientMethodServerStream2DefinitionTemplate = "QtProtobuf::QGrpcSubscriptionShared $classname$::subscribe$method_name_upper$Updates(const $param_type$ &$param_name$, const QPointer<$return_type$> &$return_name$)\n"
389+
const char *Templates::ClientMethodServerStream2DefinitionTemplate = "QtProtobuf::QGrpcStreamShared $classname$::subscribe$method_name_upper$(const $param_type$ &$param_name$, const QPointer<$return_type$> &$return_name$)\n"
390390
"{\n"
391391
" return subscribe(\"$method_name$\", $param_name$, $return_name$);\n"
392392
"}\n";
393-
const char *Templates::ClientMethodServerStreamQmlDefinitionTemplate = "QtProtobuf::QGrpcSubscriptionShared $classname$::qmlSubscribe$method_name_upper$Updates_p($param_type$ *$param_name$, $return_type$ *$return_name$)\n"
393+
const char *Templates::ClientMethodServerStreamQmlDefinitionTemplate = "QtProtobuf::QGrpcStreamShared $classname$::qmlSubscribe$method_name_upper$_p($param_type$ *$param_name$, $return_type$ *$return_name$)\n"
394394
"{\n"
395395
" return subscribe(\"$method_name$\", *$param_name$, QPointer<$return_type$>($return_name$));\n"
396396
"}\n";

src/grpc/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ qt_protobuf_internal_add_library(Grpc
22
SOURCES
33
qgrpcasyncoperationbase.cpp
44
qgrpcasyncreply.cpp
5-
qgrpcsubscription.cpp
5+
qgrpcstream.cpp
66
qgrpcstatus.cpp
77
qabstractgrpcchannel.cpp
88
qgrpchttp2channel.cpp
@@ -14,7 +14,7 @@ qt_protobuf_internal_add_library(Grpc
1414
PUBLIC_HEADER
1515
qgrpcasyncoperationbase_p.h
1616
qgrpcasyncreply.h
17-
qgrpcsubscription.h
17+
qgrpcstream.h
1818
qgrpcstatus.h
1919
qabstractgrpcchannel.h
2020
qgrpchttp2channel.h

src/grpc/qabstractgrpcchannel.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#include "qabstractgrpcchannel.h"
2727

2828
#include "qgrpcasyncreply.h"
29-
#include "qgrpcsubscription.h"
29+
#include "qgrpcstream.h"
3030
#include <QThread>
3131

3232
namespace QtProtobuf {
@@ -52,10 +52,10 @@ void QAbstractGrpcChannel::abort(QGrpcAsyncReply *reply)
5252
reply->error({QGrpcStatus::StatusCode::Aborted, QLatin1String("Call aborted by user or timeout")});
5353
}
5454

55-
void QAbstractGrpcChannel::cancel(QGrpcSubscription *subscription)
55+
void QAbstractGrpcChannel::cancel(QGrpcStream *stream)
5656
{
57-
assert(subscription != nullptr);
58-
subscription->finished();
57+
assert(stream != nullptr);
58+
stream->finished();
5959
}
6060

6161
const QThread *QAbstractGrpcChannel::thread() const

src/grpc/qabstractgrpcchannel.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class QThread;
3939
namespace QtProtobuf {
4040

4141
class QGrpcAsyncReply;
42-
class QGrpcSubscription;
42+
class QGrpcStream;
4343
class QAbstractGrpcClient;
4444
class QAbstractProtobufSerializer;
4545
struct QAbstractGrpcChannelPrivate;
@@ -85,7 +85,7 @@ class Q_GRPC_EXPORT QAbstractGrpcChannel
8585
* \param[in] args serialized argument message
8686
* \param[in] handler callback that will be called when message recevied from the server-stream
8787
*/
88-
virtual void subscribe(QGrpcSubscription *subscription, const QString &service, QAbstractGrpcClient *client) = 0;
88+
virtual void subscribe(QGrpcStream *stream, const QString &service, QAbstractGrpcClient *client) = 0;
8989

9090
virtual std::shared_ptr<QAbstractProtobufSerializer> serializer() const = 0;
9191

@@ -106,13 +106,13 @@ class Q_GRPC_EXPORT QAbstractGrpcChannel
106106

107107
/*!
108108
* \private
109-
* \brief Cancels \p subscription
110-
* \param[in] subscription returned by QAbstractGrpcChannel::subscribe() method
109+
* \brief Cancels \p stream
110+
* \param[in] stream returned by QAbstractGrpcChannel::subscribe() method
111111
*/
112-
virtual void cancel(QGrpcSubscription *subscription);
112+
virtual void cancel(QGrpcStream *stream);
113113

114114
friend class QGrpcAsyncReply;
115-
friend class QGrpcSubscription;
115+
friend class QGrpcStream;
116116
private:
117117
Q_DISABLE_COPY(QAbstractGrpcChannel)
118118
std::unique_ptr<QAbstractGrpcChannelPrivate> dPtr;

src/grpc/qabstractgrpcclient.cpp

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#include "qabstractgrpcclient.h"
2727

2828
#include "qgrpcasyncreply.h"
29-
#include "qgrpcsubscription.h"
29+
#include "qgrpcstream.h"
3030
#include "qprotobufserializerregistry_p.h"
3131

3232
#include <QTimer>
@@ -44,7 +44,7 @@ class QAbstractGrpcClientPrivate final {
4444
std::shared_ptr<QAbstractGrpcChannel> channel;
4545
const QString service;
4646
std::shared_ptr<QAbstractProtobufSerializer> serializer;
47-
std::vector<QGrpcSubscriptionShared> activeSubscriptions;
47+
std::vector<QGrpcStreamShared> activeStreams;
4848
};
4949
}
5050

@@ -128,64 +128,64 @@ QGrpcAsyncReplyShared QAbstractGrpcClient::call(const QString &method, const QBy
128128
return reply;
129129
}
130130

131-
QGrpcSubscriptionShared QAbstractGrpcClient::subscribe(const QString &method, const QByteArray &arg, const QtProtobuf::SubscriptionHandler &handler)
131+
QGrpcStreamShared QAbstractGrpcClient::subscribe(const QString &method, const QByteArray &arg, const QtProtobuf::StreamHandler &handler)
132132
{
133-
QGrpcSubscriptionShared subscription;
133+
QGrpcStreamShared stream;
134134

135135
if (thread() != QThread::currentThread()) {
136-
QMetaObject::invokeMethod(this, [&]()->QGrpcSubscriptionShared {
137-
qProtoDebug() << "Subscription: " << dPtr->service << method << " called from different thread";
136+
QMetaObject::invokeMethod(this, [&]()->QGrpcStreamShared {
137+
qProtoDebug() << "Stream: " << dPtr->service << method << " called from different thread";
138138
return subscribe(method, arg, handler);
139-
}, Qt::BlockingQueuedConnection, &subscription);
139+
}, Qt::BlockingQueuedConnection, &stream);
140140
} else if (dPtr->channel) {
141-
subscription.reset(new QGrpcSubscription(dPtr->channel, method, arg, handler, this), [](QGrpcSubscription *subscription) { subscription->deleteLater(); });
141+
stream.reset(new QGrpcStream(dPtr->channel, method, arg, handler, this), [](QGrpcStream *stream) { stream->deleteLater(); });
142142

143-
auto it = std::find_if(std::begin(dPtr->activeSubscriptions), std::end(dPtr->activeSubscriptions), [subscription](const QGrpcSubscriptionShared &activeSubscription) {
144-
return *activeSubscription == *subscription;
143+
auto it = std::find_if(std::begin(dPtr->activeStreams), std::end(dPtr->activeStreams), [stream](const QGrpcStreamShared &activeStream) {
144+
return *activeStream == *stream;
145145
});
146146

147-
if (it != std::end(dPtr->activeSubscriptions)) {
147+
if (it != std::end(dPtr->activeStreams)) {
148148
(*it)->addHandler(handler);
149-
return *it; //If subscription already exists return it for handling
149+
return *it; //If stream already exists return it for handling
150150
}
151151

152152
auto errorConnection = std::make_shared<QMetaObject::Connection>();
153-
*errorConnection = connect(subscription.get(), &QGrpcSubscription::error, this, [this, subscription](const QGrpcStatus &status) {
154-
qProtoWarning() << subscription->method() << "call" << dPtr->service << "subscription error: " << status.message();
153+
*errorConnection = connect(stream.get(), &QGrpcStream::error, this, [this, stream](const QGrpcStatus &status) {
154+
qProtoWarning() << stream->method() << "call" << dPtr->service << "stream error: " << status.message();
155155
error(status);
156-
std::weak_ptr<QGrpcSubscription> weakSubscription = subscription;
156+
std::weak_ptr<QGrpcStream> weakStream = stream;
157157
//TODO: Make timeout configurable from channel settings
158-
QTimer::singleShot(1000, this, [this, weakSubscription, method = subscription->method()] {
159-
auto subscription = weakSubscription.lock();
160-
if (subscription) {
161-
dPtr->channel->subscribe(subscription.get(), dPtr->service, this);
158+
QTimer::singleShot(1000, this, [this, weakStream, method = stream->method()] {
159+
auto stream = weakStream.lock();
160+
if (stream) {
161+
dPtr->channel->subscribe(stream.get(), dPtr->service, this);
162162
} else {
163-
qProtoDebug() << "Subscription for " << dPtr->service << "method" << method << " will not be restored by timeout.";
163+
qProtoDebug() << "Stream for " << dPtr->service << "method" << method << " will not be restored by timeout.";
164164
}
165165
});
166166
});
167167

168168
auto finishedConnection = std::make_shared<QMetaObject::Connection>();
169-
*finishedConnection = connect(subscription.get(), &QGrpcSubscription::finished, this, [this, subscription, errorConnection, finishedConnection]() mutable {
170-
qProtoWarning() << subscription->method() << "call" << dPtr->service << "subscription finished";
171-
auto it = std::find_if(std::begin(dPtr->activeSubscriptions), std::end(dPtr->activeSubscriptions), [subscription](QGrpcSubscriptionShared activeSubscription) {
172-
return *activeSubscription == *subscription;
169+
*finishedConnection = connect(stream.get(), &QGrpcStream::finished, this, [this, stream, errorConnection, finishedConnection]() mutable {
170+
qProtoWarning() << stream->method() << "call" << dPtr->service << "stream finished";
171+
auto it = std::find_if(std::begin(dPtr->activeStreams), std::end(dPtr->activeStreams), [stream](QGrpcStreamShared activeStream) {
172+
return *activeStream == *stream;
173173
});
174174

175-
if (it != std::end(dPtr->activeSubscriptions)) {
176-
dPtr->activeSubscriptions.erase(it);
175+
if (it != std::end(dPtr->activeStreams)) {
176+
dPtr->activeStreams.erase(it);
177177
}
178178
QObject::disconnect(*errorConnection);
179179
QObject::disconnect(*finishedConnection);
180-
subscription.reset();
180+
stream.reset();
181181
});
182182

183-
dPtr->channel->subscribe(subscription.get(), dPtr->service, this);
184-
dPtr->activeSubscriptions.push_back(subscription);
183+
dPtr->channel->subscribe(stream.get(), dPtr->service, this);
184+
dPtr->activeStreams.push_back(stream);
185185
} else {
186186
error({QGrpcStatus::Unknown, QLatin1String("No channel(s) attached.")});
187187
}
188-
return subscription;
188+
return stream;
189189
}
190190

191191
QAbstractProtobufSerializer *QAbstractGrpcClient::serializer() const

src/grpc/qabstractgrpcclient.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@
4747
namespace QtProtobuf {
4848

4949
class QGrpcAsyncReply;
50-
class QGrpcSubscription;
50+
class QGrpcStream;
5151
class QGrpcAsyncOperationBase;
5252
class QAbstractGrpcChannel;
5353
class QAbstractGrpcClientPrivate;
5454

5555
/*!
5656
* \private
5757
*/
58-
using SubscriptionHandler = std::function<void(const QByteArray&)>;
58+
using StreamHandler = std::function<void(const QByteArray&)>;
5959

6060
/*!
6161
* \ingroup QtGrpc
@@ -135,7 +135,7 @@ class Q_GRPC_EXPORT QAbstractGrpcClient : public QObject
135135
* update recevied from server-stream
136136
*/
137137
template<typename A>
138-
QGrpcSubscriptionShared subscribe(const QString &method, const A &arg) {
138+
QGrpcStreamShared subscribe(const QString &method, const A &arg) {
139139
return subscribe(method, arg.serialize(serializer()));
140140
}
141141

@@ -150,7 +150,7 @@ class Q_GRPC_EXPORT QAbstractGrpcClient : public QObject
150150
* updated message recevied from server-stream
151151
*/
152152
template<typename A, typename R>
153-
QGrpcSubscriptionShared subscribe(const QString &method, const A &arg, const QPointer<R> &ret) {
153+
QGrpcStreamShared subscribe(const QString &method, const A &arg, const QPointer<R> &ret) {
154154
if (ret.isNull()) {
155155
static const QString nullPointerError("Unable to subscribe method: %1. Pointer to return data is null");
156156
error({QGrpcStatus::InvalidArgument, nullPointerError.arg(method)});
@@ -162,16 +162,16 @@ class Q_GRPC_EXPORT QAbstractGrpcClient : public QObject
162162
if (!ret.isNull()) {
163163
tryDeserialize(*ret, data);
164164
} else {
165-
static const QLatin1String nullPointerError("Pointer to return data is null while subscription update received");
165+
static const QLatin1String nullPointerError("Pointer to return data is null while stream update received");
166166
error({QGrpcStatus::InvalidArgument, nullPointerError});
167167
qProtoCritical() << nullPointerError;
168168
}
169169
});
170170
}
171171

172172
/*!
173-
* \brief Canceles all subscriptions for specified \p method
174-
* \param[in] method Name of method subscription for to be canceled
173+
* \brief Canceles all streams for specified \p method
174+
* \param[in] method Name of method stream for to be canceled
175175
*/
176176
void cancel(const QString &method);
177177

@@ -190,7 +190,7 @@ class Q_GRPC_EXPORT QAbstractGrpcClient : public QObject
190190
QGrpcAsyncReplyShared call(const QString &method, const QByteArray &arg);
191191

192192
//!\private
193-
QGrpcSubscriptionShared subscribe(const QString &method, const QByteArray &arg, const QtProtobuf::SubscriptionHandler &handler = {});
193+
QGrpcStreamShared subscribe(const QString &method, const QByteArray &arg, const QtProtobuf::StreamHandler &handler = {});
194194

195195
/*!
196196
* \private

0 commit comments

Comments
 (0)