Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De Bestands-SDK bevat twee waarnemersklassen. U kunt virtuele observer-leden overschrijven om event-callbacks te verwerken.
Wanneer een asynchrone bewerking is voltooid, roept de SDK de OnXxx() lidfunctie aan die overeenkomt met het resultaat. Voorbeelden zijn OnLoadSuccess(), OnLoadFailure()en OnAddEngineSuccess() voor mip::FileProfile::Observer.
In deze voorbeelden wordt het promise/future-patroon gedemonstreert. De SDK-voorbeelden gebruiken dit patroon ook en u kunt dit uitbreiden om het gewenste callbackgedrag te implementeren.
Implementatie van de File Profile-observer
In het volgende voorbeeld wordt een klasse gemaakt die ProfileObserveris afgeleid van mip::FileProfile::Observer. De memberfuncties overschrijven de functies van de basisklasse om het future/promise-patroon te gebruiken dat in alle voorbeelden wordt gebruikt.
Note
De voorbeelden implementeren alleen een deel van de observerklasse en bevatten geen overschrijvingen voor de aan mip::FileEngine gerelateerde observers.
profile_observer.h
Het headerbestand definieert ProfileObserver, leidt het af van mip::FileProfile::Observer en overschrijft vervolgens elk van de memberfuncties.
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
De implementatie definieert een actie die moet worden uitgevoerd voor elke waarnemersfunctie.
Elk lid accepteert twee parameters. De eerste is een gedeelde aanwijzer naar de klasse die door de functie wordt verwerkt.
ProfileObserver::OnLoadSuccess verwacht een mip::FileProfile.
ProfileObserver::OnAddEngineSuccess verwacht mip::FileEngine.
De tweede is een gedeelde aanwijzer naar de context. In deze implementatie is de context een verwijzing naar een std::promise, doorgegeven door verwijzing als std::shared_ptr<void>. De eerste regel van de functie cast deze waarde naar std::promiseen slaat deze vervolgens op in een object met de naam promise.
Ten slotte maakt de code zich klaar voor de toekomst door promise->set_value() in te stellen en het object mip::FileProfile door te geven.
#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.
Wanneer u een SDK-klasse instantieert of een functie gebruikt die asynchrone bewerkingen uitvoert, geeft u de waarnemers-implementatie door aan de instellingenconstructor of asynchrone functie zelf. Wanneer u het object mip::FileProfile::Settings instantieert, accepteert de constructor mip::FileProfile::Observer als een van de parameters. In dit voorbeeld ziet u de aangepaste ProfileObserver, die wordt gebruikt in een mip::FileProfile::Settings constructor.
Implementatie van FileHandler-observer
Net als de profielwaarnemer implementeert mip::FileHandler een mip::FileHandler::Observer-klasse voor het afhandelen van meldingen van asynchrone gebeurtenissen tijdens bestandsbewerkingen. De implementatie is vergelijkbaar met de voorgaande implementatie. In het volgende voorbeeld wordt FileHandlerObserver gedeeltelijk gedefinieerd.
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
Dit voorbeeld bevat alleen de eerste twee functies, maar de resterende functies gebruiken een vergelijkbaar patroon voor deze functies en voor ProfileObserver.
#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
Volgende stappen
- Verken het C++-voorbeeld van de MIP File SDK op GitHub.