Microsoft Information Protection SDK - Waarnemers van beleids-SDK

De Beleids-SDK bevat één waarnemersklasse. Overschrijf virtuele waarnemers om callbacks te verwerken voor asynchrone bewerkingen.

Wanneer een asynchrone bewerking is voltooid, roept de SDK de OnXxx() lidfunctie aan die overeenkomt met het resultaat. Voorbeelden zijn OnLoadSuccess(), OnLoadFailure()en OnAddEngineSuccess() voor mip::PolicyProfile::Observer.

In de volgende voorbeelden ziet u het promise/future-patroon. De SDK-voorbeelden gebruiken dit patroon ook en u kunt dit uitbreiden om het gewenste callbackgedrag te implementeren.

Implementatie van profielobserver

In het volgende voorbeeld wordt een klasse gemaakt die ProfileObserveris afgeleid van mip::PolicyProfile::Observer. De memberfuncties overschrijven de functies van de basisklasse om het future/promise-patroon te gebruiken dat in alle voorbeelden wordt gebruikt.

Note

De volgende voorbeelden implementeren alleen een deel van de observer-klasse en bevatten geen overschrijvingen voor de aan mip::PolicyEngine gerelateerde observers.

profile_observer.h

Het headerbestand definieert ProfileObserver, leidt het af van mip::PolicyProfile::Observer en overschrijft vervolgens elk van de memberfuncties.

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

De implementatie definieert een actie die moet worden uitgevoerd voor elke waarnemersfunctie.

Elk lid accepteert twee parameters. De eerste is een gedeelde aanwijzer naar de klasse die door de functie wordt verwerkt. ProfileObserver::OnLoadSuccess verwacht een mip::PolicyProfile. ProfileObserver::OnAddEngineSuccess verwacht mip::PolicyEngine.

De tweede is een gedeelde aanwijzer naar de context. In deze implementatie is de context een verwijzing naar een std::promise, doorgegeven als shared_ptr<void>. De eerste regel van de functie cast deze waarde naar std::promiseen slaat deze vervolgens op in een object met de naam promise.

Ten slotte maakt de code zich klaar voor de toekomst door promise->set_value() in te stellen en het object mip::PolicyProfile door te geven.

#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

Wanneer u een asynchrone bewerking uitvoert, geeft u de observerimplementatie door aan de constructor van de instellingen of aan de asynchrone functie zelf.

Volgende stappen