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 ochrony zawiera trzy klasy obserwatorów. Można zastąpić wirtualnych członków obserwatora w celu obsługi wywołań zwrotnych dla operacji asynchronicznych.
-
Profil ochrony:
mip::ProtectionProfile::Observer -
Aparat ochrony:
mip::ProtectionEngine::Observer -
Menedżer Ochrony:
mip::ProtectionHandler::Observer
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::ProtectionProfile::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 ProtectionProfile
Poniższy przykład tworzy klasę , ProtectionProfileObserverImplktóra pochodzi z klasy mip::ProtectionProfile::Observer. Funkcje składowe zastępują klasę bazową, aby używać wzorca obietnicy/przyszłości używanego w próbkach.
ProtectionProfileObserverImpl, deklaracja klasy
Nagłówek definiuje ProtectionProfileObserverImpl, wyprowadza go z mip::ProtectionProfile::Observer, a następnie przesłania każdą z funkcji składowych.
//ProtectionProfileObserverImpl.h
class ProtectionProfileObserverImpl final : public mip::ProtectionProfile::Observer {
public:
ProtectionProfileObserverImpl() { }
void OnLoadSuccess(const shared_ptr<mip::ProtectionProfile>& profile, const shared_ptr<void>& context) override;
void OnLoadFailure(const exception_ptr& error, const shared_ptr<void>& context) override;
void OnAddEngineSuccess(const shared_ptr<mip::ProtectionEngine>& engine, const shared_ptr<void>& context) override;
void OnAddEngineFailure(const exception_ptr& error, const shared_ptr<void>& context) override;
};
Implementacja ProtectionProfileObserverImpl
Implementacja definiuje działanie wykonywane dla każdej funkcji składowej obserwatora.
Każdy członek akceptuje dwa parametry. Pierwszy to współdzielony wskaźnik do klasy obsługiwanej przez funkcję.
ProtectionObserver::OnLoadSuccess oczekuje, że otrzyma element mip::ProtectionProfile.
ProtectionObserver::OnAddEngineSuccess oczekuje mip::ProtectionEngine.
Drugi to wskaźnik współużytkowany do kontekstu. 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::ProtectionProfile obiekt.
//protection_observers.cpp
void ProtectionProfileObserverImpl::OnLoadSuccess(
const shared_ptr<mip::ProtectionProfile>& profile,
const shared_ptr<void>& context) {
auto loadPromise = static_cast<promise<shared_ptr<mip::ProtectionProfile>>*>(context.get());
loadPromise->set_value(profile);
};
void ProtectionProfileObserverImpl::OnLoadFailure(const exception_ptr& error, const shared_ptr<void>& context) {
auto loadPromise = static_cast<promise<shared_ptr<mip::ProtectionProfile>>*>(context.get());
loadPromise->set_exception(error);
};
void ProtectionProfileObserverImpl::OnAddEngineSuccess(
const shared_ptr<mip::ProtectionEngine>& engine,
const shared_ptr<void>& context) {
auto addEnginePromise = static_cast<promise<shared_ptr<mip::ProtectionEngine>>*>(context.get());
addEnginePromise->set_value(engine);
};
void ProtectionProfileObserverImpl::OnAddEngineFailure(
const exception_ptr& error,
const shared_ptr<void>& context) {
auto addEnginePromise = static_cast<promise<shared_ptr<mip::ProtectionEngine>>*>(context.get());
addEnginePromise->set_exception(error);
};
Gdy tworzysz instancję dowolnej klasy SDK lub używasz funkcji wykonującej operacje asynchroniczne, przekaż implementację obserwatora do konstruktora klasy Settings lub do samej funkcji async. Gdy tworzysz instancję obiektu mip::ProtectionProfile::Settings, konstruktor przyjmuje mip::ProtectionProfile::Observer jako jeden z parametrów. W poniższym przykładzie pokazano użycie niestandardowego elementu ProtectionProfileObserverImpl w konstruktorze mip::ProtectionProfile::Settings.
Implementacja obserwatora programu ProtectionHandler
Podobnie jak obserwator ochrony, mip::ProtectionHandler implementuje klasę mip::ProtectionHandler::Observer do obsługi asynchronicznych powiadomień o zdarzeniach podczas operacji ochrony. Implementacja jest podobna do poprzedniej implementacji. Poniższy przykład częściowo definiuje element ProtectionHandlerObserverImpl. Pełna implementacja znajduje się w repozytorium GitHub przykładowym.
ProtectionHandlerObserverImpl, deklaracja klasy
//protection_observers.h
class ProtectionHandlerObserverImpl final : public mip::ProtectionHandler::Observer {
public:
ProtectionHandlerObserverImpl() { }
void OnCreateProtectionHandlerSuccess(const shared_ptr<mip::ProtectionHandler>& protectionHandler, const shared_ptr<void>& context) override;
void OnCreateProtectionHandlerFailure(const exception_ptr& error, const shared_ptr<void>& context) override;
};
Częściowa implementacja programu ProtectionHandlerObserverImpl
Ten przykład obejmuje tylko dwie pierwsze funkcje, ale pozostałe funkcje używają podobnego wzorca do tych funkcji i do ProtectionObserver.
//protection_observers.cpp
void ProtectionHandlerObserverImpl::OnCreateProtectionHandlerSuccess(
const shared_ptr<mip::ProtectionHandler>& protectionHandler,
const shared_ptr<void>& context) {
auto createProtectionHandlerPromise = static_cast<promise<shared_ptr<mip::ProtectionHandler>>*>(context.get());
createProtectionHandlerPromise->set_value(protectionHandler);
};
void ProtectionHandlerObserverImpl::OnCreateProtectionHandlerFailure(
const exception_ptr& error,
const shared_ptr<void>& context) {
auto createProtectionHandlerPromise = static_cast<promise<shared_ptr<mip::ProtectionHandler>>*>(context.get());
createProtectionHandlerPromise->set_exception(error);
};
Następne kroki
- Zapoznaj się z przykładem zestawu MIP Protection SDK języka C++ w GitHub.