Microsoft Information Protection SDK - Pengamat SDK Kebijakan

SDK Kebijakan berisi satu kelas pengamat. Ambil alih anggota pengamat virtual untuk menangani panggilan balik untuk operasi asinkron.

Ketika operasi asinkron selesai, SDK memanggil OnXxx() fungsi anggota yang sesuai dengan hasilnya. Contoh adalah OnLoadSuccess(), OnLoadFailure(), dan OnAddEngineSuccess() untuk mip::PolicyProfile::Observer.

Contoh berikut menunjukkan pola janji/masa depan. Sampel SDK juga menggunakan pola ini, dan Anda dapat memperluasnya untuk menerapkan perilaku panggilan balik yang diinginkan.

Implementasi pengamat profil

Contoh berikut membuat kelas, ProfileObserver, yang berasal dari mip::PolicyProfile::Observer. Fungsi anggota mengambil alih kelas dasar untuk menggunakan pola future/promise yang digunakan di seluruh sampel.

Note

Contoh berikut hanya mengimplementasikan sebagian dari kelas observer dan tidak mencakup override untuk observer yang terkait dengan mip::PolicyEngine.

profile_observer.h

Header mendefinisikan ProfileObserver, memperolehnya dari mip::PolicyProfile::Observer, lalu mengambil alih setiap fungsi anggota.

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

Implementasi mendefinisikan tindakan yang harus diambil untuk setiap fungsi anggota pengamat.

Setiap anggota menerima dua parameter. Yang pertama adalah pointer yang dibagikan ke kelas yang ditangani oleh fungsi tersebut. ProfileObserver::OnLoadSuccess mengharapkan untuk menerima mip::PolicyProfile. ProfileObserver::OnAddEngineSuccess mengharapkan mip::PolicyEngine.

Yang kedua adalah penunjuk berbagi ke konteks. Dalam implementasi ini, konteksnya adalah referensi ke std::promise, yang diteruskan sebagai shared_ptr<void>. Baris pertama fungsi melemparkan nilai ini ke std::promise, lalu menyimpannya dalam objek yang disebut promise.

Akhirnya, kode menjadikannya siap untuk masa mendatang dengan menetapkan promise->set_value() dan meneruskan objek 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

Saat Anda melakukan operasi asinkron, teruskan implementasi pengamat ke konstruktor pengaturan atau fungsi asinkron itu sendiri.

Langkah berikutnya