Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O SDK de proteção contém três classes de observadores. Pode substituir membros virtuais do observador para processar callbacks de operações assíncronas.
-
Perfil de proteção:
mip::ProtectionProfile::Observer -
Motor de Proteção:
mip::ProtectionEngine::Observer -
Manipulador de proteção:
mip::ProtectionHandler::Observer
Quando uma operação assíncrona é concluída, o SDK chama a OnXxx() função membro que corresponde ao resultado. Exemplos são OnLoadSuccess(), OnLoadFailure(), e OnAddEngineSuccess() para mip::ProtectionProfile::Observer.
Os exemplos seguintes demonstram o padrão promessa/futuro. Os exemplos do SDK também usam este padrão, e pode estendê-lo para implementar o comportamento desejado de callback.
Implementação do observador ProtectionProfile
O exemplo seguinte cria uma classe, ProtectionProfileObserverImpl, que deriva de mip::ProtectionProfile::Observer. As funções membros sobrepõem-se à classe base para usar o padrão promessa/futuro usado ao longo das amostras.
Declaração de classe ProtectionProfileObserverImpl
O cabeçalho define ProtectionProfileObserverImpl, deriva-o de mip::ProtectionProfile::Observer e, em seguida, redefine cada uma das funções-membro.
//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;
};
Implementação do ProtectionProfileObserverImpl
A implementação define uma ação a realizar para cada função membro do observador.
Cada membro aceita dois parâmetros. O primeiro é um ponteiro partilhado para a classe que a função gere.
ProtectionObserver::OnLoadSuccess espera receber um mip::ProtectionProfile.
ProtectionObserver::OnAddEngineSuccess espera mip::ProtectionEngine.
O segundo é um ponteiro partilhado para o contexto. Nesta implementação, o contexto é uma referência a um std::promise, passado como shared_ptr<void>. A primeira linha da função converte este valor em std::promise, e depois armazena-o num objeto chamado promise.
Finalmente, o código prepara o futuro ao definir promise->set_value() e passar o mip::ProtectionProfile objeto.
//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);
};
Quando instancias qualquer classe SDK ou usas uma função que realiza operações assíncronas, passa a implementação do observador para o construtor de configurações ou para a própria função assíncrona. Quando instancias o mip::ProtectionProfile::Settings objeto, o construtor aceita mip::ProtectionProfile::Observer como um dos parâmetros. O exemplo seguinte mostra o ProtectionProfileObserverImpl personalizado, usado num construtor mip::ProtectionProfile::Settings.
Implementação do observador ProtectionHandler
Semelhante ao observador de proteção, mip::ProtectionHandler implementa uma mip::ProtectionHandler::Observer classe para manipular notificações de eventos assíncronos durante operações de proteção. A implementação é semelhante à implementação anterior. O exemplo seguinte define ProtectionHandlerObserverImplparcialmente . A implementação completa encontra-se no repositório de exemplos do GitHub.
Declaração de classe 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;
};
Implementação parcial do ProtectionHandlerObserverImpl
Esta amostra inclui apenas as duas primeiras funções, mas as restantes funções usam um padrão semelhante a estas funções e a 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);
};
Passos seguintes
- Consulte o exemplo do MIP Protection SDK C++ no GitHub.