Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De Protection SDK bevat drie waarnemerklassen. U kunt virtuele observer-memberfuncties overschrijven om callbacks voor asynchrone bewerkingen te verwerken.
-
Beveiligingsprofiel:
mip::ProtectionProfile::Observer -
Beveiligingsengine:
mip::ProtectionEngine::Observer -
Beveiligingsbeheerder:
mip::ProtectionHandler::Observer
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::ProtectionProfile::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 de ProtectionProfile-observer
In het volgende voorbeeld wordt een klasse gemaakt die ProtectionProfileObserverImplis afgeleid van mip::ProtectionProfile::Observer. De lidfuncties overschrijven die van de basisklasse zodat het promise/future-patroon wordt gebruikt dat overal in de voorbeelden wordt gebruikt.
Declaratie van klasse ProtectionProfileObserverImpl
Het headerbestand definieert ProtectionProfileObserverImpl, leidt het af van mip::ProtectionProfile::Observer en overschrijft vervolgens elk van de memberfuncties.
//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;
};
Implementatie van ProtectionProfileObserverImpl
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.
ProtectionObserver::OnLoadSuccess verwacht een mip::ProtectionProfile.
ProtectionObserver::OnAddEngineSuccess verwacht mip::ProtectionEngine.
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::ProtectionProfile door te geven.
//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);
};
Wanneer u een SDK-klasse instantieert of een functie gebruikt die asynchrone bewerkingen uitvoert, geeft u de waarnemers-implementatie door aan de instellingenconstructor of asynchrone functie zelf. Wanneer u het object mip::ProtectionProfile::Settings instantieert, accepteert de constructor mip::ProtectionProfile::Observer als een van de parameters. In het volgende voorbeeld ziet u de aangepaste ProtectionProfileObserverImpl, die wordt gebruikt in een mip::ProtectionProfile::Settings constructor.
implementatie van de ProtectionHandler-observer
Net als de Beschermingswaarnemer implementeert mip::ProtectionHandler een mip::ProtectionHandler::Observer klasse voor het verwerken van asynchrone gebeurtenismeldingen tijdens beveiligingsbewerkingen. De implementatie is vergelijkbaar met de voorgaande implementatie. In het volgende voorbeeld wordt ProtectionHandlerObserverImpl gedeeltelijk gedefinieerd. De volledige implementatie bevindt zich in de GitHub voorbeeldopslagplaats.
Declaratie van klasse ProtectionHandlerObserverImpl
//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;
};
Gedeeltelijke implementatie van ProtectionHandlerObserverImpl
Dit voorbeeld bevat alleen de eerste twee functies, maar de resterende functies gebruiken een vergelijkbaar patroon voor deze functies en voor 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);
};
Volgende stappen
- Verken het C++-voorbeeld van de MIP Protection SDK op GitHub.