Microsoft Information Protection SDK - Observateurs du SDK de fichier

Le Kit de développement logiciel (SDK) File contient deux classes d’observateur. Vous pouvez remplacer les membres d’observateurs virtuels pour gérer les rappels d’événements.

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::FileProfile::Observer.

Ces exemples 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 de fichier

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

Note

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

profile_observer.h

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

class ProfileObserver final : public mip::FileProfile::Observer {
public:
ProfileObserver() { }
  void OnLoadSuccess(const std::shared_ptr<mip::FileProfile>& profile, const std::shared_ptr<void>& context) override;
  void OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override;
  //TODO: Implement mip::FileEngine related observers.
};

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::FileProfile. ProfileObserver::OnAddEngineSuccess attend mip::FileEngine.

Le deuxième est un pointeur partagé vers le contexte. Dans cette implémentation, le contexte est une référence à un std::promise, transmise par référence sous la forme de std::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::FileProfile .

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

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

//Called when FileProfile 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::FileProfile>>>(context);
  promise->set_exception(error);
}

//TODO: Implement mip::FileEngine related observers.

Lorsque vous instanciez une classe sdk ou utilisez une fonction qui effectue des opérations asynchrones, transmettez l’implémentation de l’observateur au constructeur de paramètres ou à la fonction asynchrone elle-même. Lorsque vous instanciez l’objet mip::FileProfile::Settings , le constructeur accepte mip::FileProfile::Observer l’un des paramètres. Cet exemple montre l’élément personnalisé ProfileObserver, utilisé dans un constructeur mip::FileProfile::Settings.

Implémentation de l’observateur FileHandler

Similaire à l’observateur de profil, mip::FileHandler implémente une mip::FileHandler::Observer classe pour gérer les notifications d’événements asynchrones pendant les opérations de fichier. L’implémentation est similaire à l’implémentation précédente. L’exemple suivant définit FileHandlerObserverpartiellement .

file_handler_observer.h

#include "mip/file/file_handler.h"

class FileHandlerObserver final : public mip::FileHandler::Observer {
public:
  void OnCreateFileHandlerSuccess(
      const std::shared_ptr<mip::FileHandler>& fileHandler,
      const std::shared_ptr<void>& context) override;

  void OnCreateFileHandlerFailure(
      const std::exception_ptr& error,
      const std::shared_ptr<void>& context) override;

  //TODO: override remaining member functions inherited from mip::FileHandler::Observer
};

file_handler_observer.cpp

Cet exemple inclut uniquement les deux premières fonctions, mais les fonctions restantes utilisent un modèle similaire à ces fonctions et à ProfileObserver.

#include "file_handler_observer.h"

void FileHandlerObserver::OnCreateFileHandlerSuccess(const std::shared_ptr<mip::FileHandler>& fileHandler, const std::shared_ptr<void>& context) {
    auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context);
    promise->set_value(fileHandler);
}

void FileHandlerObserver::OnCreateFileHandlerFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) {
    auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context);
    promise->set_exception(error);
}

//TODO: override remaining member functions inherited from mip::FileHandler::Observer

Étapes suivantes