Aracılığıyla paylaş


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::Observertü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::Observertüretilen öğesini tanımlar ProfileObserverve 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::Profilealmayı 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::promiseatar ve adlı promisebir 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.