Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- Zapoznaj się z przykładem zestawu MIP Policy SDK języka C++ w GitHub.