Browse Source

exception handling

synchronous
Volker Birk 5 years ago
parent
commit
1b670925f8
  1. 27
      callback_dispatcher.cc

27
callback_dispatcher.cc

@ -32,11 +32,19 @@ namespace pEp {
proc shutdown proc shutdown
) )
{ {
assert(messageToSend);
if (!messageToSend)
throw std::invalid_argument("messageToSend must be set");
targets.push_back({messageToSend, notifyHandshake, on_startup, shutdown}); targets.push_back({messageToSend, notifyHandshake, on_startup, shutdown});
} }
void CallbackDispatcher::remove(::messageToSend_t messageToSend) void CallbackDispatcher::remove(::messageToSend_t messageToSend)
{ {
assert(messageToSend);
if (!messageToSend)
throw std::invalid_argument("messageToSend argument needed");
for (auto target = targets.begin(); target != targets.end(); ++target) { for (auto target = targets.begin(); target != targets.end(); ++target) {
if (target->messageToSend == messageToSend) { if (target->messageToSend == messageToSend) {
targets.erase(target); targets.erase(target);
@ -49,15 +57,19 @@ namespace pEp {
void CallbackDispatcher::on_startup() void CallbackDispatcher::on_startup()
{ {
for (auto target : targets) for (auto target : targets) {
if (target.on_startup)
target.on_startup(); target.on_startup();
} }
}
void CallbackDispatcher::on_shutdown() void CallbackDispatcher::on_shutdown()
{ {
for (auto target : targets) for (auto target : targets) {
if (target.on_shutdown)
target.on_shutdown(); target.on_shutdown();
} }
}
void CallbackDispatcher::start_sync() void CallbackDispatcher::start_sync()
{ {
@ -66,17 +78,21 @@ namespace pEp {
&CallbackDispatcher::on_startup, &CallbackDispatcher::on_startup,
&CallbackDispatcher::on_shutdown); &CallbackDispatcher::on_shutdown);
for (auto target : callback_dispatcher.targets) for (auto target : callback_dispatcher.targets) {
if (target.notifyHandshake)
target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_START); target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_START);
} }
}
void CallbackDispatcher::stop_sync() void CallbackDispatcher::stop_sync()
{ {
pEp::Adapter::shutdown(); pEp::Adapter::shutdown();
for (auto target : callback_dispatcher.targets) for (auto target : callback_dispatcher.targets) {
if (target.notifyHandshake)
target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_STOP); target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_STOP);
} }
}
PEP_STATUS CallbackDispatcher::_messageToSend(::message *msg) PEP_STATUS CallbackDispatcher::_messageToSend(::message *msg)
{ {
@ -85,6 +101,7 @@ namespace pEp {
if (!_msg) if (!_msg)
return PEP_OUT_OF_MEMORY; return PEP_OUT_OF_MEMORY;
assert(target.messageToSend);
target.messageToSend(_msg); target.messageToSend(_msg);
} }
@ -95,6 +112,7 @@ namespace pEp {
::pEp_identity *partner, ::sync_handshake_signal signal) ::pEp_identity *partner, ::sync_handshake_signal signal)
{ {
for (auto target : targets) { for (auto target : targets) {
if (target.notifyHandshake) {
auto _me = ::identity_dup(me); auto _me = ::identity_dup(me);
if (!_me) if (!_me)
return PEP_OUT_OF_MEMORY; return PEP_OUT_OF_MEMORY;
@ -107,6 +125,7 @@ namespace pEp {
target.notifyHandshake(_me, _partner, signal); target.notifyHandshake(_me, _partner, signal);
} }
}
return PEP_STATUS_OK; return PEP_STATUS_OK;
} }

Loading…
Cancel
Save