QtProtobuf  0.6
Protobuf plugin to generate Qt classes
qgrpcsubscription.h
1 /*
2  * MIT License
3  *
4  * Copyright (c) 2019 Alexey Edelev <semlanik@gmail.com>
5  *
6  * This file is part of QtProtobuf project https://git.semlanik.org/semlanik/qtprotobuf
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a copy of this
9  * software and associated documentation files (the "Software"), to deal in the Software
10  * without restriction, including without limitation the rights to use, copy, modify,
11  * merge, publish, distribute, sublicense, and/or sell copies of the Software, and
12  * to permit persons to whom the Software is furnished to do so, subject to the following
13  * conditions:
14  *
15  * The above copyright notice and this permission notice shall be included in all copies
16  * or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
19  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
20  * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
21  * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23  * DEALINGS IN THE SOFTWARE.
24  */
25 
26 #pragma once //QGrpcSubscription
27 
28 #include <functional>
29 #include <QMutex>
30 #include <memory>
31 
32 #include "qabstractgrpcchannel.h"
33 #include "qabstractgrpcclient.h"
34 #include "qgrpcasyncoperationbase_p.h"
35 
36 #include "qtgrpcglobal.h"
37 
38 namespace QtProtobuf {
39 
40 class QAbstractGrpcClient;
41 
46 class Q_GRPC_EXPORT QGrpcSubscription final : public QGrpcAsyncOperationBase
47 {
48  Q_OBJECT
49 public:
53  void cancel();
54 
58  QString method() const {
59  return m_method;
60  }
61 
65  QByteArray arg() const {
66  return m_arg;
67  }
68 
75  void handler(const QByteArray& data) {
76  setData(data);
77  for (auto handler : m_handlers) {
78  handler(data);
79  }
80  updated();
81  }
82 
83 signals:
87  void updated();
88 
89 protected:
91  QGrpcSubscription(const std::shared_ptr<QAbstractGrpcChannel> &channel, const QString &method,
92  const QByteArray &arg, const SubscriptionHandler &handler, QAbstractGrpcClient *parent);
94  virtual ~QGrpcSubscription() = default;
95 
97  void addHandler(const SubscriptionHandler &handler);
98 
99  bool operator ==(const QGrpcSubscription &other) const {
100  return other.method() == this->method() &&
101  other.arg() == this->arg();
102  }
103 
104 private:
105  friend class QAbstractGrpcClient;
106  QString m_method;
107  QByteArray m_arg;
108  std::vector<SubscriptionHandler> m_handlers;
109 };
110 
111 }
The QAbstractGrpcClient class is bridge between gRPC clients and channels.
Definition: qabstractgrpcclient.h:67
The QGrpcSubscription class.
Definition: qgrpcsubscription.h:47
QString method() const
Returns method for this subscription.
Definition: qgrpcsubscription.h:58
void updated()
The signal is emitted when subscription received updated value from server.
QByteArray arg() const
Returns serialized arguments for this subscription.
Definition: qgrpcsubscription.h:65
void handler(const QByteArray &data)
Invokes handler method assigned to this subscription.
Definition: qgrpcsubscription.h:75