zestaw SDK Microsoft Information Protection — obserwatorzy zestawu SDK zasad

Zestaw SDK zasad zawiera jedną klasę obserwatora. Zastąpij wirtualnych członków obserwatora w celu obsługi wywołań zwrotnych dla operacji asynchronicznych.

Po zakończeniu operacji asynchronicznej zestaw SDK wywołuje OnXxx() funkcję składową odpowiadającą wynikowi. Przykłady to OnLoadSuccess(), OnLoadFailure()i OnAddEngineSuccess() dla .mip::PolicyProfile::Observer

W poniższych przykładach przedstawiono wzorzec obietnicy/przyszłości. Przykłady zestawu SDK używają również tego wzorca i można go rozszerzyć w celu zaimplementowania żądanego zachowania wywołania zwrotnego.

Implementacja obserwatora profilu

Poniższy przykład tworzy klasę , ProfileObserverktóra pochodzi z klasy mip::PolicyProfile::Observer. Funkcje składowe zastępują klasę bazową, aby używać wzorca przyszłości/obietnicy używanego w próbkach.

Note

Poniższe przykłady implementują tylko część klasy obserwatora i nie zawierają przesłonięć dla obserwatorów powiązanych z mip::PolicyEngine.

profile_observer.h

Nagłówek definiuje ProfileObserver, wyprowadza go z mip::PolicyProfile::Observer, a następnie przesłania każdą z funkcji składowych.

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

Implementacja definiuje działanie wykonywane dla każdej funkcji składowej obserwatora.

Każda składowa przyjmuje dwa parametry. Pierwszy to współdzielony wskaźnik do klasy obsługiwanej przez funkcję. ProfileObserver::OnLoadSuccess oczekuje, że otrzyma element mip::PolicyProfile. ProfileObserver::OnAddEngineSuccess oczekuje mip::PolicyEngine.

Drugi to współdzielony wskaźnik na kontekst. W tej implementacji kontekst jest odwołaniem do std::promise, przekazywanym jako shared_ptr<void>. Pierwszy wiersz funkcji rzutuje tę wartość na std::promise, a następnie przechowuje ją w obiekcie o nazwie promise.

Na koniec kod sprawia, że przyszłość jest gotowa, ustawiając promise->set_value() i przekazując mip::PolicyProfile obiekt.

#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

Podczas wykonywania dowolnej operacji asynchronicznej należy przekazać implementację obserwatora do konstruktora ustawień lub samej funkcji asynchronicznej.

Następne kroki