Microsoft Information Protection SDK - İlke SDK Gözlemcileri
İlke SDK'sı bir gözlemci sınıfı içerir. Gözlemci üyeler sanaldır ve zaman uyumsuz işlemler için geri çağırmaları işlemek üzere geçersiz kılınmalıdır.
Zaman uyumsuz bir işlem tamamlandığında, OnXxx()
sonuca karşılık gelen üye işlevi çağrılır. Örnek olarak OnLoadSuccess()
, OnLoadFailure()
ve OnAddEngineSuccess()
verilebilir mip::Profile::Observer
.
Aşağıdaki örneklerde, SDK örnekleri tarafından da kullanılan ve istenen geri çağırma davranışını uygulamak için genişletilebilen promise/future deseni gösterilmektedir.
Profil Gözlemcisi Uygulaması
Aşağıdaki örnekte, öğesinden mip::Profile::Observer
türetilen bir sınıf ProfileObserver
oluşturduk. Örneklerde kullanılan future/promise desenini kullanmak için üye işlevleri geçersiz kılındı.
Not: Aşağıdaki örnekler yalnızca kısmen uygulanır ve ilgili gözlemciler için mip::ProfileEngine
geçersiz kılmalar içermez.
profile_observer.h
Üst bilgide, öğesinden mip::Profile::Observer
türetilen öğesini tanımlar ProfileObserver
ve ardından üye işlevlerin her birini geçersiz kılarız.
class ProfileObserver final : public mip::Profile::Observer {
public:
ProfileObserver() { }
void OnLoadSuccess(const std::shared_ptr<mip::Profile>& 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
Uygulamanın kendisinde, her gözlemci üye işlevi için gerçekleştirecek bir eylem tanımlarız.
Her üye iki parametre kabul eder. birincisi, işlevi tarafından işlenen sınıfın paylaşılan işaretçisidir. ProfileObserver::OnLoadSuccess
bir mip::Profile
almayı bekler. ProfileObserver::OnAddEngineSuccess
bekleyebilirsiniz mip::ProfileEngine
.
İkincisi, bağlama ilişkin paylaşılan bir işaretçidir. Uygulamamızda bağlam olarak geçirilen shared_ptr<void>
bir std::promise
öğesine başvurudur. İşlevin ilk satırı bunu öğesine std::promise
atar ve adlı promise
bir nesnede depolanır.
Son olarak, ve nesnesi geçirilerek promise->set_value()
mip::Profile
gelecek hazır hale getiriliyor.
#include "profile_observer.h"
#include <future>
//Called when Profile is successfully loaded
void ProfileObserver::OnLoadSuccess(const std::shared_ptr<mip::Profile>& profile, const std::shared_ptr<void>& context) {
//cast context to promise
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::Profile>>>(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::Profile>>>(context);
promise->set_exception(error);
}
//TODO: Implement remaining observer members
Herhangi bir zaman uyumsuz işlem gerçekleştirilirken, gözlemci uygulaması ayarlar oluşturucusunun veya zaman uyumsuz işlevin kendisine geçirilir.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin