From 19bc0fd64d5f5035e53abfcda1559782ff3c54b4 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Thu, 28 Sep 2017 20:09:00 +0200 Subject: Better deeper signal search on received event. Search in received JSON data if we could find a better signal name if the preceding one is too fuzzy Change-Id: I83ba376890155c44d5f29dfe2401627c72539f34 Signed-off-by: Romain Forlot --- .../signal-composer-binding.cpp | 36 ++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'signal-composer-binding') 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> 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);} } } -- cgit 1.2.3-korg