Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O SDK de proteção contém três classes de observador. Você pode substituir membros do observador virtual para lidar com retornos de chamada para operações assíncronas.
-
Perfil de proteção:
mip::ProtectionProfile::Observer -
Mecanismo de proteção:
mip::ProtectionEngine::Observer -
Gerenciador 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. Os exemplos são OnLoadSuccess(), OnLoadFailure() e OnAddEngineSuccess() para mip::ProtectionProfile::Observer.
Os exemplos a seguir demonstram o padrão de promessa/futuro. Os exemplos do SDK também usam esse padrão e você pode estendê-lo para implementar o comportamento de retorno de chamada desejado.
Implementação do observador ProtectionProfile
O exemplo a seguir cria uma classe, ProtectionProfileObserverImplque deriva de mip::ProtectionProfile::Observer. As funções membro substituem a classe base para usar o padrão promise/future usado em todos os exemplos.
Declaração da classe ProtectionProfileObserverImpl
O cabeçalho define ProtectionProfileObserverImpl, deriva-o de mip::ProtectionProfile::Observer e, em seguida, sobrescreve 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 da ProtectionProfileObserverImpl
A implementação define uma ação a ser tomada para cada função de membro do observador.
Cada membro aceita dois parâmetros. O primeiro é um ponteiro compartilhado para a classe que a função manipula.
ProtectionObserver::OnLoadSuccess espera receber um mip::ProtectionProfile.
ProtectionObserver::OnAddEngineSuccess espera mip::ProtectionEngine.
O segundo é um ponteiro compartilhado para o contexto. Nessa implementação, o contexto é uma referência a um std::promise, passado como shared_ptr<void>. A primeira linha da função converte esse valor em std::promise, em seguida, armazena-o em um objeto chamado promise.
Por fim, o código prepara o futuro definindo promise->set_value() e passando 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);
};
Ao instanciar qualquer classe SDK ou usar uma função que executa operações assíncronas, passe a implementação do observador para o construtor de configurações ou a função assíncrona em si. Quando você cria uma instância do mip::ProtectionProfile::Settings objeto, o construtor aceita mip::ProtectionProfile::Observer como um dos parâmetros. O exemplo a seguir mostra o ProtectionProfileObserverImpl personalizado, usado em um construtor mip::ProtectionProfile::Settings.
Implementação do observador ProtectionHandler
Semelhante ao observador de proteção, o mip::ProtectionHandler implementa uma classe mip::ProtectionHandler::Observer para manipular notificações de evento assíncronas durante operações de proteção. A implementação é semelhante à implementação anterior. O exemplo a seguir define ProtectionHandlerObserverImplparcialmente. A implementação completa está no repositório de exemplo GitHub.
Declaração da 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;
};
ProtectionHandlerObserverImpl implementação parcial
Este exemplo inclui apenas as duas primeiras funções, mas as funções restantes usam um padrão semelhante a essas funções e para 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);
};
Próximas Etapas
- Explore o exemplo em C++ do SDK do MIP Protection no GitHub.