diff options
Diffstat (limited to 'signal-composer-binding/signal-composer-binding.cpp')
-rw-r--r-- | signal-composer-binding/signal-composer-binding.cpp | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/signal-composer-binding/signal-composer-binding.cpp b/signal-composer-binding/signal-composer-binding.cpp index a1e4543..92bd0cc 100644 --- a/signal-composer-binding/signal-composer-binding.cpp +++ b/signal-composer-binding/signal-composer-binding.cpp @@ -33,14 +33,46 @@ void onEvent(const char *event, json_object *object) { Composer& composer = Composer::instance(); + AFB_NOTICE("event: %s", json_object_to_json_string(object)); std::vector<std::shared_ptr<Signal>> signals = composer.searchSignals(event); if(!signals.empty()) { - for(auto& sig: signals) + // If there is more than 1 element then maybe we can find a more + // detailled event name in JSON object as 1 event may carry several + // signals. Try to find that one. + if(signals.size() > 1) { - sig->onReceivedCB(object); + bool found = false; + json_object_iterator iter = json_object_iter_begin(object); + json_object_iterator iterEnd = json_object_iter_end(object); + while(!json_object_iter_equal(&iter, &iterEnd)) + { + json_object *value = json_object_iter_peek_value(&iter); + if(json_object_is_type(value, json_type_string)) + { + std::string name = json_object_get_string(value); + for(auto& sig: signals) + { + if(*sig == name) + { + found = true; + sig->onReceivedCB(object); + } + } + } + json_object_iter_next(&iter); + } + // If nothing found in JSON data then apply onReceived callback + // for all signals found + if(! found) + { + for(auto& sig: signals) + {sig->onReceivedCB(object);} + } } + else + {signals[0]->onReceivedCB(object);} } } |