Microsoft Information Protection SDK – SDK-filobservatörer

Fil-SDK:et innehåller två observatörsklasser. Du kan åsidosätta virtuella observatörsmedlemmar för att hantera händelseåteranrop.

När en asynkron åtgärd slutförs anropar SDK medlemsfunktionen OnXxx() som motsvarar resultatet. Exempel är OnLoadSuccess(), OnLoadFailure()och OnAddEngineSuccess() för mip::FileProfile::Observer.

De här exemplen visar mönstret för löfte/framtid. SDK-exemplen använder också det här mönstret, och du kan utöka det för att implementera önskat återanropsbeteende.

Implementering av filprofilobservatör

I följande exempel skapas en klass, ProfileObserver, som härleds från mip::FileProfile::Observer. Medlemsfunktionerna åsidosätter basklassen för att använda det framtids-/löftesmönster som används i exemplen.

Note

Exemplen implementerar endast en del av observatörsklassen och inkluderar inte åsidosättningar för de relaterade observatörerna mip::FileEngine .

profile_observer.h

Rubriken definierar ProfileObserver, härleder den från mip::FileProfile::Observeroch åsidosätter sedan var och en av medlemsfunktionerna.

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

Implementeringen definierar en åtgärd som ska vidtas för varje observatörsmedlemsfunktion.

Varje medlem accepterar två parametrar. Den första är en delad pekare till klassen som funktionen hanterar. ProfileObserver::OnLoadSuccess förväntar sig att få en mip::FileProfile. ProfileObserver::OnAddEngineSuccess förväntar sig mip::FileEngine.

Den andra är en delad pekare till kontexten. I den här implementeringen är kontexten en referens till en std::promise, som skickas som referens som std::shared_ptr<void>. Den första raden i funktionen omvandlar det här värdet till std::promiseoch lagrar det sedan i ett objekt med namnet promise.

Slutligen gör koden framtiden redo genom att ange promise->set_value() och skicka objektet mip::FileProfile .

#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.

När du instansierar någon SDK-klass eller använder en funktion som utför asynkrona åtgärder skickar du observer-implementeringen till själva inställningskonstruktorn eller asynkron funktion. När du instansierar objektet mip::FileProfile::Observer tar konstruktorn emot mip::FileProfile::Settings som en av parametrarna. Det här exemplet visar den anpassade ProfileObserver, som används i en mip::FileProfile::Settings-konstruktor.

Implementering av FileHandler-observer

Precis som profilobservatören mip::FileHandler implementerar en mip::FileHandler::Observer klass för hantering av asynkrona händelsemeddelanden under filåtgärder. Implementeringen liknar den föregående implementeringen. I följande exempel definieras FileHandlerObserverdelvis .

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

Det här exemplet innehåller bara de två första funktionerna, men de återstående funktionerna använder ett liknande mönster som dessa funktioner och till 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

Nästa steg