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::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::FileEngine
geçersiz kılmalar içermez.
profile_observer.h
Üst bilgide, öğesinden mip::FileProfile::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::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::FileProfile
almayı 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::promise
başvurusudur. İş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::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 ProfileObserver
iş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