Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
SDK Perlindungan berisi tiga kelas pengamat. Anda dapat mengambil alih anggota pengamat virtual untuk menangani panggilan balik untuk operasi asinkron.
-
Profil Perlindungan:
mip::ProtectionProfile::Observer -
Mesin Perlindungan:
mip::ProtectionEngine::Observer -
Penangan Perlindungan:
mip::ProtectionHandler::Observer
Ketika operasi asinkron selesai, SDK memanggil OnXxx() fungsi anggota yang sesuai dengan hasilnya. Contohnya adalah OnLoadSuccess(), OnLoadFailure(), dan OnAddEngineSuccess() untuk mip::ProtectionProfile::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 ProtectionProfile
Contoh berikut membuat kelas, ProtectionProfileObserverImpl, yang berasal dari mip::ProtectionProfile::Observer. Fungsi anggota mengambil alih kelas dasar untuk menggunakan pola janji/masa depan yang digunakan di seluruh sampel.
Deklarasi kelas ProtectionProfileObserverImpl
Header mendefinisikan ProtectionProfileObserverImpl, memperolehnya dari mip::ProtectionProfile::Observer, lalu mengambil alih setiap fungsi anggota.
//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;
};
Implementasi ProtectionProfileObserverImpl
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.
ProtectionObserver::OnLoadSuccess mengharapkan untuk menerima mip::ProtectionProfile.
ProtectionObserver::OnAddEngineSuccess mengharapkan mip::ProtectionEngine.
Yang kedua adalah penunjuk bersama 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::ProtectionProfile.
//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);
};
Saat Anda membuat instans kelas SDK atau menggunakan fungsi yang melakukan operasi asinkron, teruskan implementasi pengamat ke konstruktor pengaturan atau fungsi asinkron itu sendiri. Saat Anda membuat mip::ProtectionProfile::Settings instans objek, konstruktor menerima mip::ProtectionProfile::Observer sebagai salah satu parameter. Contoh berikut menunjukkan ProtectionProfileObserverImpl kustom yang digunakan dalam konstruktor mip::ProtectionProfile::Settings.
Implementasi pengamat ProtectionHandler
Mirip dengan observer perlindungan, mip::ProtectionHandler mengimplementasikan kelas mip::ProtectionHandler::Observer untuk menangani notifikasi kejadian asinkron selama operasi perlindungan. Implementasinya mirip dengan implementasi sebelumnya. Contoh berikut mendefinisikan sebagian ProtectionHandlerObserverImpl. Implementasi lengkap ada di repositori sampel GitHub.
Deklarasi kelas 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;
};
Implementasi parsial ProtectionHandlerObserverImpl
Sampel ini hanya mencakup dua fungsi pertama, tetapi fungsi yang tersisa menggunakan pola yang mirip dengan fungsi-fungsi ini dan untuk 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);
};
Langkah berikutnya
- Jelajahi sampel MIP Protection SDK C++ pada GitHub.