SDK do Microsoft Proteção de Informações – Observadores do SDK de Política

O SDK de Política contém uma classe de observador. Substitua os membros do observador virtual para lidar com retornos de chamada para operações assíncronas.

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::PolicyProfile::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 de perfil

O exemplo a seguir cria uma classe, ProfileObserverque deriva de mip::PolicyProfile::Observer. As funções de membro substituem a classe base para usar o padrão futuro/promessa usado em todas as amostras.

Note

Os exemplos a seguir implementam apenas parte da classe de observador e não incluem substituições para os mip::PolicyEngine observadores relacionados.

profile_observer.h

O cabeçalho define ProfileObserver, deriva-o de mip::PolicyProfile::Observer, em seguida, substitui cada uma das funções membro.

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

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. ProfileObserver::OnLoadSuccess espera receber um mip::PolicyProfile. ProfileObserver::OnAddEngineSuccess espera mip::PolicyEngine.

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::PolicyProfile objeto.

#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

Ao executar qualquer operação assíncrona, passe a implementação do observador para o construtor de configurações ou a função assíncrona em si.

Próximas Etapas