Browse Source

merging

synchronous
Volker Birk 5 years ago
parent
commit
04852c1d4f
  1. 55
      callback_dispatcher.cc

55
callback_dispatcher.cc

@ -23,11 +23,19 @@ namespace pEp {
proc shutdown
)
{
assert(messageToSend);
if (!messageToSend)
throw std::invalid_argument("messageToSend must be set");
targets.push_back({messageToSend, notifyHandshake, on_startup, shutdown});
}
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) {
if (target->messageToSend == messageToSend) {
targets.erase(target);
@ -40,14 +48,18 @@ namespace pEp {
void CallbackDispatcher::on_startup()
{
for (auto target : targets)
target.on_startup();
for (auto target : targets) {
if (target.on_startup)
target.on_startup();
}
}
void CallbackDispatcher::on_shutdown()
{
for (auto target : targets)
target.on_shutdown();
for (auto target : targets) {
if (target.on_shutdown)
target.on_shutdown();
}
}
void CallbackDispatcher::start_sync()
@ -57,16 +69,20 @@ namespace pEp {
&CallbackDispatcher::on_startup,
&CallbackDispatcher::on_shutdown);
for (auto target : callback_dispatcher.targets)
target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_START);
for (auto target : callback_dispatcher.targets) {
if (target.notifyHandshake)
target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_START);
}
}
void CallbackDispatcher::stop_sync()
{
pEp::Adapter::shutdown();
for (auto target : callback_dispatcher.targets)
target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_STOP);
for (auto target : callback_dispatcher.targets) {
if (target.notifyHandshake)
target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_STOP);
}
}
PEP_STATUS CallbackDispatcher::_messageToSend(::message *msg)
@ -76,6 +92,7 @@ namespace pEp {
if (!_msg)
return PEP_OUT_OF_MEMORY;
assert(target.messageToSend);
target.messageToSend(_msg);
}
@ -86,17 +103,19 @@ namespace pEp {
::pEp_identity *partner, ::sync_handshake_signal signal)
{
for (auto target : targets) {
auto _me = ::identity_dup(me);
if (!_me)
return PEP_OUT_OF_MEMORY;
auto _partner = ::identity_dup(partner);
if (!_partner) {
free_identity(_me);
return PEP_OUT_OF_MEMORY;
if (target.notifyHandshake) {
auto _me = ::identity_dup(me);
if (!_me)
return PEP_OUT_OF_MEMORY;
auto _partner = ::identity_dup(partner);
if (!_partner) {
free_identity(_me);
return PEP_OUT_OF_MEMORY;
}
target.notifyHandshake(_me, _partner, signal);
}
target.notifyHandshake(_me, _partner, signal);
}
return PEP_STATUS_OK;

Loading…
Cancel
Save