QGrpcInterceptorChain Class
Enregistre et gère une séquence d'intercepteurs. En savoir plus...
| En-tête : | #include <QGrpcInterceptorChain> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Grpc) target_link_libraries(mytarget PRIVATE Qt6::Grpc) |
| Depuis : | Qt 6.11 |
- Liste de tous les membres, y compris les membres hérités
- QGrpcInterceptorChain fait partie des intercepteurs d'Qt GRPC .
Fonctions publiques
| QGrpcInterceptorChain() | |
| QGrpcInterceptorChain(const QGrpcInterceptorChain &) | |
| ~QGrpcInterceptorChain() | |
| bool | add(T *interceptor) |
| bool | add(std::unique_ptr<T> &&interceptor) |
| QtGrpc::InterceptorCapabilities | capabilities() const |
| QtGrpc::InterceptorCapabilities | capabilitiesAt(qsizetype index) const |
| void | clear() |
| bool | empty() const |
| bool | hasHandlerFor(QtGrpc::InterceptorCapability cap) const |
| bool | isEmpty() const |
| bool | set(Ts *... interceptors) |
| bool | set(std::unique_ptr<Ts> &&... interceptors) |
| qsizetype | size() const |
| void | swap(QGrpcInterceptorChain &other) |
| QGrpcInterceptorChain & | operator=(const QGrpcInterceptorChain &) |
Description détaillée
QGrpcInterceptorChain stocke des instances d’intercepteurs qui observent ou modifient différentes étapes d’un RPC. La chaîne est transmise à un canal lors de sa construction, et le canal en est propriétaire pendant le reste de sa durée de vie.
Au fur et à mesure que l’appel RPC progresse dans son cycle de vie, le canal invoque les intercepteurs stockés dans la chaîne aux points d’interception correspondants.
Les intercepteurs sont ajoutés à la chaîne dans un ordre défini. Cet ordre est important et détermine la manière dont les intercepteurs sont invoqués lors des étapes sortantes et entrantes d’un RPC. Pour plus de détails, consultez la section « Direction et flux » de la présentation des intercepteurs d’Qt GRPC .
Les intercepteurs peuvent être ajoutés à l’aide de deux modèles de propriété principaux :
- Propriétaire: ajoutez des intercepteurs à l’aide de `
std::unique_ptr<T>`. En cas de réussite, la chaîne en prend la propriété et détruit les intercepteurs lorsque la chaîne (et donc le canal) est détruite. - Non-owning: ajoutez des intercepteurs à l’aide de pointeurs bruts
T*. La chaîne n’en prend pas la propriété. L’appelant doit s’assurer que les objets intercepteurs restent valides aussi longtemps que le canal peut les invoquer.
Les deux modèles peuvent être combinés au sein d’une même chaîne. Bien que cela soit pris en charge, le mélange d’intercepteurs « owning » et « non-owning » nécessite de veiller à ce que les intercepteurs « non-owning » survivent à tous les canaux susceptibles de les utiliser.
Remarque : QGrpcInterceptorChain n’est pas copiable et ne peut être que déplacé.
Voir également QtGrpc::InterceptorCapability.
Documentation des fonctions membres
QGrpcInterceptorChain::QGrpcInterceptorChain()
Crée une chaîne d'intercepteurs vide.
[delete] QGrpcInterceptorChain::QGrpcInterceptorChain(const QGrpcInterceptorChain &)
Copie et construit une instance de ` QGrpcInterceptorChain`. Cette fonction est supprimée.
[noexcept] QGrpcInterceptorChain::~QGrpcInterceptorChain()
Détruit la chaîne d'intercepteurs.
template <typename T> requires QtGrpcPrivate::if_interceptor<T> bool QGrpcInterceptorChain::add(T *interceptor)
Ajoute interceptor à la chaîne sans en devenir propriétaire.
Renvoie true si l'intercepteur a été ajouté ; sinon, renvoie false.
Lors de la configuration d’intercepteurs via un pointeur brut, l’appelant conserve la propriété. La classe ` QGrpcInterceptorChain ` stocke des références sans propriété vers les intercepteurs fournis.
La chaîne d’intercepteurs est transférée au canal, qui en devient propriétaire. Par conséquent, tous les objets intercepteurs doivent rester valides pendant toute la durée de vie du canal qui utilise cette chaîne.
Le code suivant montre comment utiliser un destructeur personnalisé pour lier la durée de vie d’un intercepteur à un seul canal :
auto *metricsInterceptor = new MetricsInterceptor();
auto *authInterceptor = new AuthInterceptor();
~~~
QGrpcInterceptorChain chain;
if (!chain.add(metricsInterceptor))
qFatal("Failed to add metrics interceptor");
if (!chain.add(authInterceptor))
qFatal("Failed to add auth interceptor");
auto channel = std::shared_ptr<QGrpcHttp2Channel>(
new QGrpcHttp2Channel(QUrl("you_uri:port"), std::move(chain)),
[&metricsInterceptor, &authInterceptor](QGrpcHttp2Channel* ptr) {
delete ptr;
qDebug() << "Channel destroyed.";
// Si ces intercepteurs ne sont partagés avec aucun autre canal,
// c'est ici qu'il convient de les supprimer. Sinon, leur
// durée de vie doit être gérée en externe.
delete metricsInterceptor;
delete authInterceptor;
metricsInterceptor = nullptr;
authInterceptor = nullptr;
}
);Chaque type d’intercepteur doit implémenter au moins une interface d’intercepteur (par exemple, QGrpcStartInterceptor ou QGrpcFinishedInterceptor) afin de fournir des capacités d’interception.
Voir également set() et clear().
template <typename T> requires QtGrpcPrivate::if_interceptor<T> bool QGrpcInterceptorChain::add(std::unique_ptr<T> &&interceptor)
Ajoute interceptor à la chaîne et en prend la propriété.
Renvoie ` true ` si l'intercepteur a été ajouté ; sinon, renvoie ` false`.
La propriété de ` interceptor ` n'est transférée à la chaîne que si l'intercepteur a bien été ajouté. Si la fonction renvoie ` false`, la propriété reste acquise à l'appelant.
Chaque type d’intercepteur doit implémenter au moins une interface d’intercepteur (par exemple, ` QGrpcStartInterceptor ` ou ` QGrpcFinishedInterceptor`) pour fournir des capacités d’interception.
Voir également set() et clear().
[noexcept] QtGrpc::InterceptorCapabilities QGrpcInterceptorChain::capabilities() const
Renvoie l'ensemble des capacités de tous les intercepteurs stockés dans la chaîne.
La valeur renvoyée correspond à l'opération « OU binaire » des capacités fournies par les intercepteurs.
Voir également hasHandlerFor(), capabilitiesAt() et QtGrpc::InterceptorCapability.
QtGrpc::InterceptorCapabilities QGrpcInterceptorChain::capabilitiesAt(qsizetype index) const
Renvoie les fonctionnalités fournies par l'intercepteur à l'adresse index.
Avertissement : l'appel de cette fonction avec un index non valide pour la chaîne entraîne un comportement indéfini.
Voir également capabilities() et size().
void QGrpcInterceptorChain::clear()
Efface la chaîne.
Supprime tous les intercepteurs de la chaîne. Tous les intercepteurs appartenant à la chaîne sont détruits.
Voir également add() et set().
[noexcept] bool QGrpcInterceptorChain::empty() const
Renvoie ` true ` si la chaîne ne contient aucun intercepteur ; sinon, renvoie ` false`.
Voir également size() et isEmpty().
[noexcept] bool QGrpcInterceptorChain::hasHandlerFor(QtGrpc::InterceptorCapability cap) const
Renvoie true si la chaîne contient au moins un intercepteur fournissant un gestionnaire pour la capacité cap; sinon, renvoie false.
Voir également capabilities() et capabilitiesAt().
[noexcept] bool QGrpcInterceptorChain::isEmpty() const
Renvoie ` true ` si la chaîne ne contient aucun intercepteur ; sinon, renvoie ` false`.
Voir également size() et empty().
template <typename... Ts> requires QtGrpcPrivate::if_interceptor<Ts...> bool QGrpcInterceptorChain::set(Ts *... interceptors)
Remplace le contenu de la chaîne par interceptors sans en prendre la propriété.
Renvoie true si tous les intercepteurs ont été ajoutés avec succès ; sinon, renvoie false et laisse la chaîne inchangée.
Lors de la définition d’intercepteurs par pointeur brut, l’appelant conserve la propriété. La variable ` QGrpcInterceptorChain ` stocke des références sans propriété vers les intercepteurs fournis.
La chaîne d’intercepteurs est transférée au canal, qui en devient propriétaire. Par conséquent, tous les objets intercepteurs doivent rester valides pendant toute la durée de vie du canal qui utilise cette chaîne.
Le code suivant montre comment utiliser un destructeur personnalisé pour lier la durée de vie d’un intercepteur à un seul canal :
auto *metricsInterceptor = new MetricsInterceptor();
auto *authInterceptor = new AuthInterceptor();
~~~
QGrpcInterceptorChain chain;
if (!chain.set(metricsInterceptor, authInterceptor))
qFatal("Failed to set interceptors to chain");
auto channel = std::shared_ptr<QGrpcHttp2Channel>(
new QGrpcHttp2Channel(QUrl("you_uri:port"), std::move(chain)),
[&metricsInterceptor, &authInterceptor](QGrpcHttp2Channel* ptr) {
delete ptr;
qDebug() << "Channel destroyed.";
// Si ces intercepteurs ne sont partagés avec aucun autre canal,
// c'est ici qu'il convient de les supprimer. Sinon, leur
// durée de vie doit être gérée en externe.
delete metricsInterceptor;
delete authInterceptor;
metricsInterceptor = nullptr;
authInterceptor = nullptr;
}
);Chaque type d’intercepteur doit implémenter au moins une interface d’intercepteur (par exemple, ` QGrpcStartInterceptor ` ou ` QGrpcFinishedInterceptor`) afin de fournir des capacités d’interception.
Voir également add() et clear().
template <typename... Ts> requires QtGrpcPrivate::if_interceptor<Ts...> bool QGrpcInterceptorChain::set(std::unique_ptr<Ts> &&... interceptors)
Remplace le contenu de la chaîne par interceptors et en prend la propriété.
Renvoie true si tous les intercepteurs ont été ajoutés avec succès ; sinon, renvoie false et laisse la chaîne inchangée.
Les intercepteurs sont traités dans l’ordre dans lequel ils sont transmis à cette fonction. Si tous les ajouts aboutissent, la chaîne est remplacée par les nouveaux intercepteurs dans cet ordre.
La propriété est transférée progressivement au fur et à mesure que les intercepteurs sont traités. Si l’opération échoue, tous les intercepteurs qui ont été ajoutés avec succès avant l’échec sont détruits, tandis que les unique_ptrs restants (non encore traités) restent valides.
Chaque type d’intercepteur doit implémenter au moins une interface d’intercepteur (par exemple, QGrpcStartInterceptor ou QGrpcFinishedInterceptor) pour fournir des capacités d’interception.
Voir également add() et clear().
[noexcept] qsizetype QGrpcInterceptorChain::size() const
Renvoie le nombre d'intercepteurs stockés dans la chaîne.
Voir aussi isEmpty().
[noexcept] void QGrpcInterceptorChain::swap(QGrpcInterceptorChain &other)
Permute l'other s avec cet objet. Cette opération est très rapide et ne rencontre jamais d'échec.
[delete] QGrpcInterceptorChain &QGrpcInterceptorChain::operator=(const QGrpcInterceptorChain &)
Copie et attribue « other » à cette instance « QGrpcInterceptorChain ». Cette fonction est supprimée.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.