// Copyright (C) 2022 The Qt Company Ltd. // Copyright (C) 2019 Alexey Edelev // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef QGRPCOPERATION_H #define QGRPCOPERATION_H #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QGrpcOperationContext; class QGrpcOperationPrivate; class QAbstractGrpcChannel; class QGrpcCallOptions; class Q_GRPC_EXPORT QGrpcOperation : public QObject { Q_OBJECT public: ~QGrpcOperation() override; template = true> std::optional read() const { std::optional r(std::in_place); if (!read(&*r)) r.reset(); return r; } bool read(QProtobufMessage *message) const; #if QT_DEPRECATED_SINCE(6, 13) QT_DEPRECATED_VERSION_X_6_13("Use serverInitialMetadata()") [[nodiscard]] const QHash &metadata() const & noexcept; void metadata() const && = delete; #endif [[nodiscard]] const QMultiHash & serverInitialMetadata() const & noexcept; void serverInitialMetadata() const && = delete; [[nodiscard]] const QMultiHash & serverTrailingMetadata() const & noexcept; void serverTrailingMetadata() const && = delete; [[nodiscard]] QLatin1StringView method() const noexcept; [[nodiscard]] bool isFinished() const noexcept; [[nodiscard]] QMetaType responseMetaType() const; Q_SIGNALS: void finished(const QGrpcStatus &status); void serverInitialMetadataReceived(); public Q_SLOTS: void cancel(); protected: explicit QGrpcOperation(QtGrpc::RpcDescriptor descriptor, const QGrpcCallOptions &options, const std::weak_ptr &channel); [[nodiscard]] const QGrpcOperationContext &context() const & noexcept; [[nodiscard]] QGrpcOperationContext &context() & noexcept { return const_cast(std::as_const(*this).context()); } void context() const && = delete; void writeMessage(const QProtobufMessage &message); void writesDone(); private: void onMessageReceived(const QByteArray &data); void onFinished(const QGrpcStatus &status); private: Q_DISABLE_COPY_MOVE(QGrpcOperation) Q_DECLARE_PRIVATE(QGrpcOperation) friend class QGrpcOperationContext; public: bool event(QEvent *event) override; }; QT_END_NAMESPACE #endif // QGRPCOPERATION_H