Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El SDK de directiva contiene una clase de observador. Sobrescriba los miembros del observador virtual para administrar las devoluciones de llamada de las operaciones asíncronas.
Cuando se completa una operación asincrónica, el SDK llama a la OnXxx() función miembro que corresponde al resultado. Algunos ejemplos son OnLoadSuccess(), OnLoadFailure()y OnAddEngineSuccess() para mip::PolicyProfile::Observer.
En los ejemplos siguientes se muestra el patrón de promesa y futuro. Los ejemplos del SDK también usan este patrón y puede ampliarlo para implementar el comportamiento de devolución de llamada deseado.
Implementación del observador de perfiles
En el ejemplo siguiente se crea una clase , ProfileObserver, que deriva de mip::PolicyProfile::Observer. Las funciones miembro sobrescriben las de la clase base para usar el patrón future/promise utilizado en todos los ejemplos.
Note
Los siguientes ejemplos implementan solo una parte de la clase de observador y no incluyen sobrescrituras para los observadores relacionados con mip::PolicyEngine.
profile_observer.h
El encabezado define ProfileObserver, lo deriva de mip::PolicyProfile::Observery, a continuación, invalida cada una de las funciones miembro.
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
La implementación define una acción que se va a realizar para cada función miembro del observador.
Cada miembro acepta dos parámetros. El primero es un puntero compartido a la clase que administra la función.
ProfileObserver::OnLoadSuccess espera recibir un mip::PolicyProfile.
ProfileObserver::OnAddEngineSuccess espera mip::PolicyEngine.
El segundo es un puntero compartido al contexto. En esta implementación, el contexto es una referencia a std::promise, pasada como shared_ptr<void>. La primera línea de la función convierte este valor std::promiseen y, a continuación, la almacena en un objeto denominado promise.
Por último, el código deja preparado el futuro estableciendo promise->set_value() y pasando el objeto mip::PolicyProfile.
#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
Al realizar cualquier operación asincrónica, pase la implementación del observador al constructor de configuración o a la propia función asincrónica.
Pasos siguientes
- Explore el ejemplo C++ del SDK de directivas de MIP en GitHub.