You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libpEpAdapter/src/callback_dispatcher.hh

63 lines
1.8 KiB

// This file is under GNU General Public License 3.0
// see LICENSE.txt
#ifndef LIBPEPADAPTER_CALLBACK_DISPATCHER_HH
#define LIBPEPADAPTER_CALLBACK_DISPATCHER_HH
#include <vector>
#include <functional>
#include <mutex>
#include "Semaphore.hh"
#include "passphrase_cache.hh"
#include <pEp/sync_api.h>
namespace pEp {
// use this class when implementing a desktop adapter
// register different interfaces with add()
// then use CallbackDispatcher::start_sync() to start Sync
// and CallbackDispatcher::stop_sync() to stop Sync
class CallbackDispatcher {
using proc = std::function<void()>;
struct callbacks {
::messageToSend_t messageToSend;
::notifyHandshake_t notifyHandshake;
proc on_startup;
proc on_shutdown;
};
std::vector<callbacks> targets;
Semaphore semaphore;
public:
void add(
::messageToSend_t messageToSend,
::notifyHandshake_t notifyHandshake,
proc on_startup = nullptr,
proc on_shutdown = nullptr);
void remove(::messageToSend_t messageToSend);
static PEP_STATUS messageToSend(::message *msg);
static PEP_STATUS notifyHandshake(
::pEp_identity *me,
::pEp_identity *partner,
::sync_handshake_signal signal);
void on_startup();
void on_shutdown();
protected:
PEP_STATUS _messageToSend(::message *msg);
PEP_STATUS _notifyHandshake(
::pEp_identity *me,
::pEp_identity *partner,
::sync_handshake_signal signal);
friend const char *PassphraseCache::add(const std::string &passphrase);
};
extern CallbackDispatcher callback_dispatcher;
} // namespace pEp
#endif // LIBPEPADAPTER_CALLBACK_DISPATCHER_HH