Zestaw SDK usługi Microsoft Information Protection — obserwatorzy zestawu SDK zasad
Zestaw SDK zasad zawiera jedną klasę obserwatora. Elementy członkowskie obserwatora są wirtualne i powinny być zastępowane w celu obsługi wywołań zwrotnych dla operacji asynchronicznych.
Po zakończeniu OnXxx()
operacji asynchronicznej wywoływana jest funkcja składowa odpowiadająca wynikowi. Przykłady to OnLoadSuccess()
, OnLoadFailure()
i OnAddEngineSuccess()
dla .mip::Profile::Observer
W poniższych przykładach pokazano wzorzec obietnicy/przyszłości, który jest również używany przez przykłady zestawu SDK i można go rozszerzyć w celu zaimplementowania żądanego zachowania wywołania zwrotnego.
Implementacja obserwatora profilu
W poniższym przykładzie utworzyliśmy klasę, ProfileObserver
która pochodzi z klasy mip::Profile::Observer
. Funkcje składowe zostały zastąpione, aby używać wzorca przyszłości/obietnicy używanego w próbkach.
Uwaga: poniższe przykłady są implementowane tylko częściowo i nie obejmują przesłonięć powiązanych mip::ProfileEngine
obserwatorów.
profile_observer.h
W nagłówku definiujemy ProfileObserver
element , wyprowadzając z mip::Profile::Observer
, a następnie zastępujemy poszczególne funkcje składowe.
class ProfileObserver final : public mip::Profile::Observer {
public:
ProfileObserver() { }
void OnLoadSuccess(const std::shared_ptr<mip::Profile>& 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
W samej implementacji definiujemy akcję, która ma być wykonywana dla każdej funkcji składowej obserwatora.
Każdy element członkowski akceptuje dwa parametry. Pierwszy to udostępniony wskaźnik do klasy obsługiwanej przez funkcję. ProfileObserver::OnLoadSuccess
oczekuje się, że otrzyma element mip::Profile
. ProfileObserver::OnAddEngineSuccess
oczekiwany mip::ProfileEngine
przez program .
Drugi to wskaźnik współużytkowany do kontekstu. W naszej implementacji kontekst jest odwołaniem do elementu , przekazanego std::promise
jako shared_ptr<void>
. Pierwszy wiersz funkcji rzutuje to na std::promise
, a następnie przechowywany w obiekcie o nazwie promise
.
Na koniec przyszłość jest gotowa, ustawiając promise->set_value()
obiekt i przekazując go mip::Profile
.
#include "profile_observer.h"
#include <future>
//Called when Profile is successfully loaded
void ProfileObserver::OnLoadSuccess(const std::shared_ptr<mip::Profile>& profile, const std::shared_ptr<void>& context) {
//cast context to promise
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::Profile>>>(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::Profile>>>(context);
promise->set_exception(error);
}
//TODO: Implement remaining observer members
Podczas wykonywania dowolnej operacji asynchronicznej implementacja obserwatora jest przekazywana do konstruktora ustawień lub samej funkcji asynchronicznej.