Microsoft Information Protection SDK - Pengamat File SDK

File SDK berisi dua kelas pengamat. Anda dapat mengambil alih anggota pengamat virtual untuk menangani panggilan balik peristiwa.

Ketika operasi asinkron selesai, SDK memanggil OnXxx() fungsi anggota yang sesuai dengan hasilnya. Contoh adalah OnLoadSuccess(), OnLoadFailure(), dan OnAddEngineSuccess() untuk mip::FileProfile::Observer.

Contoh-contoh ini menunjukkan pola janji/masa depan. Sampel SDK juga menggunakan pola ini, dan Anda dapat memperluasnya untuk menerapkan perilaku panggilan balik yang diinginkan.

Implementasi pengamat Profil File

Contoh berikut membuat kelas, ProfileObserver, yang berasal dari mip::FileProfile::Observer. Fungsi anggota mengambil alih kelas dasar untuk menggunakan pola future/promise yang digunakan di seluruh sampel.

Note

Sampel hanya mengimplementasikan bagian dari kelas pengamat dan tidak menyertakan penimpaan mip::FileEngine untuk pengamat terkait.

profile_observer.h

Header mendefinisikan ProfileObserver, memperolehnya dari mip::FileProfile::Observer, lalu mengambil alih setiap fungsi anggota.

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

Implementasi mendefinisikan tindakan yang harus diambil untuk setiap fungsi anggota pengamat.

Setiap anggota menerima dua parameter. Yang pertama adalah pointer yang dibagikan ke kelas yang ditangani oleh fungsi tersebut. ProfileObserver::OnLoadSuccess mengharapkan untuk menerima mip::FileProfile. ProfileObserver::OnAddEngineSuccess mengharapkan mip::FileEngine.

Yang kedua adalah penunjuk berbagi ke konteks. Dalam implementasi ini, konteksnya adalah referensi ke std::promise, yang diteruskan oleh referensi sebagai std::shared_ptr<void>. Baris pertama fungsi melemparkan nilai ini ke std::promise, lalu menyimpannya dalam objek yang disebut promise.

Akhirnya, kode menjadikannya siap untuk masa mendatang dengan menetapkan promise->set_value() dan meneruskan objek 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.

Saat Anda membuat instans kelas SDK atau menggunakan fungsi yang melakukan operasi asinkron, teruskan implementasi pengamat ke konstruktor pengaturan atau fungsi asinkron itu sendiri. Saat Anda membuat mip::FileProfile::Settings instans objek, konstruktor menerima mip::FileProfile::Observer sebagai salah satu parameter. Contoh ini menunjukkan ProfileObserver kustom yang digunakan dalam konstruktor mip::FileProfile::Settings.

Implementasi pengamat FileHandler

Mirip dengan pengamat profil, mip::FileHandler mengimplementasikan mip::FileHandler::Observer kelas untuk menangani pemberitahuan peristiwa asinkron selama operasi file. Implementasinya mirip dengan implementasi sebelumnya. Contoh berikut mendefinisikan sebagian 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

Sampel ini hanya mencakup dua fungsi pertama, tetapi fungsi yang tersisa menggunakan pola yang mirip dengan fungsi-fungsi ini dan untuk 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

Langkah berikutnya