SDK de stratégie - observateurs du SDK Microsoft Information Protection

Le Kit de développement logiciel (SDK) policy contient une classe d’observateur. Remplacez les membres de l’observateur virtuel pour gérer les rappels pour les opérations asynchrones.

Lorsqu’une opération asynchrone se termine, le SDK appelle la OnXxx() fonction membre qui correspond au résultat. Voici des exemples : OnLoadSuccess(), OnLoadFailure()et OnAddEngineSuccess() pour mip::PolicyProfile::Observer.

Les exemples suivants illustrent le modèle promesse/futur. Les exemples du Kit de développement logiciel (SDK) utilisent également ce modèle et vous pouvez l’étendre pour implémenter le comportement de rappel souhaité.

Implémentation de l’observateur de profil

L’exemple suivant crée une classe, ProfileObserverqui dérive de mip::PolicyProfile::Observer. Les fonctions membres remplacent la classe de base pour utiliser le modèle futur/promesse utilisé dans les exemples.

Note

Les exemples suivants implémentent uniquement une partie de la classe observateur et n’incluent pas de remplacements pour les mip::PolicyEngine observateurs associés.

profile_observer.h

Le fichier d’en-tête définit ProfileObserver, le fait dériver de mip::PolicyProfile::Observer, puis redéfinit chacune des fonctions membres.

class ProfileObserver final : public mip::PolicyProfile::Observer {
public:
ProfileObserver() { }
  void OnLoadSuccess(const std::shared_ptr<mip::PolicyProfile>& profile, const std::shared_ptr<void>& context) override;
  void OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override;
  //TODO: Implement remaining members
};

profile_observer.cpp

L’implémentation définit une action à entreprendre pour chaque fonction membre d’observateur.

Chaque membre accepte deux paramètres. Le premier est un pointeur partagé vers la classe gérée par la fonction. ProfileObserver::OnLoadSuccess s’attend à recevoir un mip::PolicyProfile. ProfileObserver::OnAddEngineSuccess mip::PolicyEngineattend .

Le deuxième est un pointeur partagé vers le contexte. Dans cette implémentation, le contexte est une référence à un std::promise, passé en tant que shared_ptr<void>. La première ligne de la fonction convertit cette valeur std::promiseen , puis la stocke dans un objet appelé promise.

Enfin, le code prépare l’avenir en définissant promise->set_value() et en transmettant l’objet mip::PolicyProfile .

#include "profile_observer.h"
#include <future>

//Called when Profile is successfully loaded
void ProfileObserver::OnLoadSuccess(const std::shared_ptr<mip::PolicyProfile>& profile, const std::shared_ptr<void>& context) {
  //cast context to promise
  auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::PolicyProfile>>>(context);
  //set promise value to profile
  promise->set_value(profile);
}

//Called when Profile fails to load
void ProfileObserver::OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) {
  auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::PolicyProfile>>>(context);
  promise->set_exception(error);
}

//TODO: Implement remaining observer members

Lorsque vous effectuez une opération asynchrone, transmettez l’implémentation de l’observateur au constructeur de paramètres ou à la fonction asynchrone elle-même.

Étapes suivantes