Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Richtlinien-SDK enthält eine Beobachterklasse. Überschreiben Sie virtuelle Beobachtermitglieder, um Rückrufe für asynchrone Vorgänge zu behandeln.
Wenn ein asynchroner Vorgang abgeschlossen ist, ruft das SDK die OnXxx() Memberfunktion auf, die dem Ergebnis entspricht. Beispiele sind OnLoadSuccess(), OnLoadFailure()und OnAddEngineSuccess() für mip::PolicyProfile::Observer.
Die folgenden Beispiele veranschaulichen das Zusage-/zukünftige Muster. Die SDK-Beispiele verwenden auch dieses Muster, und Sie können es erweitern, um das gewünschte Rückrufverhalten zu implementieren.
Implementierung des Profilbeobachters
Im folgenden Beispiel wird eine Klasse, ProfileObserver, erstellt, die von mip::PolicyProfile::Observer abgeleitet ist. Die Memberfunktionen überschreiben die Basisklasse, um das in den Beispielen verwendete Muster "Future/Promise" zu verwenden.
Note
Die folgenden Codebeispiele implementieren nur einen Teil der Observer-Klasse und enthalten keine Überschreibungen für die zu mip::PolicyEngine gehörenden Observer.
profile_observer.h
Die Header-Datei definiert ProfileObserver, leitet es von mip::PolicyProfile::Observer ab und überschreibt dann jede der Member-Funktionen.
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
Die Implementierung definiert eine Aktion, die für jede Beobachtermitgliedsfunktion zu ergreifen ist.
Jedes Mitglied akzeptiert zwei Parameter. Der erste ist ein Shared Pointer auf die Klasse, die von der Funktion verarbeitet wird.
ProfileObserver::OnLoadSuccess erwartet, ein mip::PolicyProfile zu erhalten.
ProfileObserver::OnAddEngineSuccess erwartet mip::PolicyEngine.
Die zweite ist ein freigegebener Zeiger auf den Kontext. In dieser Implementierung ist der Kontext ein Verweis auf ein std::promise, übergeben als shared_ptr<void>. Die erste Zeile der Funktion wandelt diesen Wert in std::promise um und speichert ihn dann in einem Objekt namens promise.
Letztendlich wird durch den Code für die Zukunft gerüstet, indem promise->set_value() festgelegt und dem mip::PolicyProfile-Objekt übergeben wird.
#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
Wenn Sie einen asynchronen Vorgang ausführen, übergeben Sie die Beobachterimplementierung an den Einstellungskonstruktor oder die asynchrone Funktion selbst.
Nächste Schritte
- Erkunden Sie das MIP Policy SDK C++-Beispiel für GitHub.