Aracılığıyla paylaş


Microsoft Information Protection SDK - Dosya SDK Gözlemcileri

Dosya SDK'sı iki gözlemci sınıfı içerir. Gözlemci üyeler sanaldır ve olay geri çağırmalarını işlemek için geçersiz kılınabilir.

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::FileProfile::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.

Dosya Profili Gözlemci Uygulaması

Aşağıdaki örnekte, öğesinden mip::FileProfile::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::FileEngine geçersiz kılmalar içermez.

profile_observer.h

Üst bilgide, öğesinden mip::FileProfile::Observertüretilen öğesini tanımlar ProfileObserverve ardından üye işlevlerin her birini geçersiz kılarız.

class ProfileObserver final : public mip::FileProfile::Observer {
public:
ProfileObserver() { }
  void OnLoadSuccess(const std::shared_ptr<mip::FileProfile>& profile, const std::shared_ptr<void>& context) override;
  void OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override;
  //TODO: Implement mip::FileEngine related observers.
};

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şlevde ele aldığımız sınıfın paylaşılan bir işaretçisidir. ProfileObserver::OnLoadSuccess bir mip::FileProfilealmayı bekler. ProfileObserver::OnAddEngineSuccess bekleyebilirsiniz mip::FileEngine.

İkincisi, bağlama ilişkin paylaşılan bir işaretçidir. Uygulamamızda bağlam, başvurusu tarafından olarak std::shared_ptr<void>geçirilen bir std::promisebaşvurusudur. İşlevin ilk satırı bunu öğesine std::promiseatar ve adlı promisebir nesnede depolanır.

Son olarak, ve nesnesi geçirilerek promise->set_value()mip::FileProfile gelecek hazır hale getiriliyor.

#include "profile_observer.h"
#include <future>

//Called when FileProfile is successfully loaded
void ProfileObserver::OnLoadSuccess(const std::shared_ptr<mip::FileProfile>& profile, const std::shared_ptr<void>& context) {
  //cast context to promise
  auto promise = 
  std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileProfile>>>(context);
  //set promise value to profile
  promise->set_value(profile);
}

//Called when FileProfile 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::FileProfile>>>(context);
  promise->set_exception(error);
}

//TODO: Implement mip::FileEngine related observers.

Herhangi bir SDK sınıfı örneği oluşturduğumuz veya zaman uyumsuz işlemler gerçekleştiren bir işlev kullandığımızda, gözlemci uygulamasını ayarlar oluşturucusunun veya zaman uyumsuz işlevin kendisine geçiririz. Nesne örneği mip::FileProfile::Settings oluştururken, oluşturucu parametrelerden biri olarak alır mip::FileProfile::Observer . Aşağıdaki örnekte, bir mip::FileProfile::Settings oluşturucuda kullanılan özel ProfileObserverörneğimiz gösterilmektedir.

FileHandler Gözlemci Uygulaması

Profil gözlemcisine benzer şekilde, mip::FileHandler dosya işlemleri sırasında zaman uyumsuz olay bildirimlerini işlemek için bir mip::FileHandler::Observers sınıf uygular. Uygulama, yukarıda ayrıntılarıyla belirtilene benzer. FileHandlerObserver aşağıda kısmen tanımlanmıştır.

file_handler_observer.h

#include "mip/file/file_handler.h"

class FileHandlerObserver final : public mip::FileHandler::Observer {
public:
  void OnCreateFileHandlerSuccess(
      const std::shared_ptr<mip::FileHandler>& fileHandler,
      const std::shared_ptr<void>& context) override;

  void OnCreateFileHandlerFailure(
      const std::exception_ptr& error,
      const std::shared_ptr<void>& context) override;

  //TODO: override remaining member functions inherited from mip::FileHandler::Observer
};

file_handler_observer.cpp

Bu örnek yalnızca ilk iki işlevdir, ancak kalan işlevler ve ProfileObserverişlevlerine benzer bir desen kullanır.

#include "file_handler_observer.h"

void FileHandlerObserver::OnCreateFileHandlerSuccess(const std::shared_ptr<mip::FileHandler>& fileHandler, const std::shared_ptr<void>& context) {
    auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context);
    promise->set_value(fileHandler);
}

void FileHandlerObserver::OnCreateFileHandlerFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) {
    auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context);
    promise->set_exception(error);
}

//TODO: override remaining member functions inherited from mip::FileHandler::Observer