Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
mip::FileProfile::Observer için örnekler OnLoadSuccess(), OnLoadFailure() ve OnAddEngineSuccess()'dir.
Bu örnekler, SDK örnekleri tarafından da kullanılan ve istenen geri çağırma davranışını uygulamak için genişletilebilen promise/future desenini gösterir.
Dosya Profili Gözlemci Uygulaması
Aşağıdaki örnekte, mip::FileProfile::Observer sınıfından türetilen ProfileObserver adlı bir sınıf oluşturduk. Örneklerde kullanılan future/promise desenini kullanmak için üye işlevleri geçersiz kılındı.
Not: Örnekler yalnızca kısmen uygulanır ve ilgili gözlemciler için mip::FileEngine geçersiz kılmalar içermez.
profile_observer.h
Başlık dosyasında, mip::FileProfile::Observer öğesinden türeyen ProfileObserver öğesini tanımlar, ardından üye işlevlerinin 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, fonksiyonda işlediğimiz sınıfa yönelik paylaşılan bir işaretçidir.
ProfileObserver::OnLoadSuccess, bir mip::FileProfile almayı bekler.
ProfileObserver::OnAddEngineSuccess beklerdi mip::FileEngine.
İkincisi, bağlama ilişkin paylaşılan bir işaretçidir. Uygulamamızda bağlam, std::shared_ptr<void> olarak referansla geçirilen bir std::promise referansıdır. Fonksiyonun ilk satırı this'i std::promise türüne dönüştürür, ardından bunu promise adlı bir nesnede depolar.
Son olarak, promise->set_value() ayarlanıp mip::FileProfile nesnesi geçirilerek future hazır duruma getirilir.
#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ının örneğini oluşturduğumuzda veya eşzamansız işlemler gerçekleştiren bir işlev kullandığımızda, gözlemci uygulamasını ya ayar oluşturucusuna ya da eşzamansız işlevin kendisine geçiririz.
mip::FileProfile::Settings nesnesi örneklenirken, oluşturucu parametrelerden biri olarak mip::FileProfile::Observer'i alır. Bu örnek, bir ProfileObserver oluşturucuda kullanılan özel mip::FileProfile::Settingsöğesini gösterir.
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