Microsoft Information Protection SDK - 파일 SDK 관찰자
파일 SDK에는 두 가지 관찰자 클래스가 포함됩니다. 관찰자 멤버는 가상이며 이벤트 콜백을 처리하도록 재정의할 수 있습니다.
비동기 작업이 완료되면 OnXxx()
결과에 해당하는 멤버 함수가 호출됩니다. 예는 OnLoadSuccess()
, OnLoadFailure()
및 OnAddEngineSuccess()
에 대한 것입니다 mip::FileProfile::Observer
.
아래 예제에서는 SDK 샘플에서도 사용되며 원하는 콜백 동작을 구현하도록 확장할 수 있는 promise/future 패턴을 보여 줍니다.
파일 프로필 관찰자 구현
다음 예제에서는 .에서 mip::FileProfile::Observer
파생된 클래스 ProfileObserver
를 만들었습니다. 멤버 함수는 샘플 전체에서 사용되는 미래/약속 패턴을 사용하도록 재정의되었습니다.
참고: 아래 샘플은 부분적으로만 구현되며 관련 관찰자에 대한 재정의를 mip::FileEngine
포함하지 않습니다.
profile_observer.h
헤더에서 파생된 다음 각 멤버 함수를 재정의하여 mip::FileProfile::Observer
정의ProfileObserver
합니다.
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
구현 자체에서 각 관찰자 멤버 함수에 대해 수행할 작업을 정의합니다.
각 멤버는 두 개의 매개 변수를 허용합니다. 첫 번째는 함수에서 처리하는 클래스에 대한 공유 포인터입니다. ProfileObserver::OnLoadSuccess
은 (을 mip::FileProfile
) 수신할 것으로 예상됩니다. ProfileObserver::OnAddEngineSuccess
를 예상할 수 mip::FileEngine
있습니다.
두 번째는 컨텍스트에 대한 공유 포인터입니다. 구현에서 컨텍스트는 참조로 전달되는 에 std::promise
대한 참조입니다 std::shared_ptr<void>
. 함수의 첫 번째 줄은 이를 캐스팅한 std::promise
다음, 호출 promise
된 개체에 저장합니다.
마지막으로 개체를 설정하고 promise->set_value()
전달하여 미래를 준비합니다 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.
SDK 클래스를 인스턴스화하거나 비동기 작업을 수행하는 함수를 사용하는 경우 관찰자 구현을 설정 생성자 또는 비동기 함수 자체에 전달합니다. 개체를 인스턴스화할 mip::FileProfile::Settings
때 생성자는 매개 변수 중 하나로 사용됩니다 mip::FileProfile::Observer
. 아래 예에서는 mip::FileProfile::Settings
생성자에서 사용되는 사용자 지정 ProfileObserver
을 보여줍니다.
FileHandler 관찰자 구현
프로필 관찰자와 마찬가지로 파일 mip::FileHandler
작업 중에 비동기 이벤트 알림을 처리하기 위한 클래스를 구현 mip::FileHandler::Observers
합니다. 구현은 위에서 설명한 것과 유사합니다. FileHandlerObserver
는 아래에 부분적으로 정의되어 있습니다.
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
이 샘플은 처음 두 함수에 불과하지만 다시 기본 함수는 이와 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