aboutsummaryrefslogtreecommitdiffstats
path: root/src/hs-client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hs-client.cpp')
-rw-r--r--src/hs-client.cpp41
1 files changed, 29 insertions, 12 deletions
diff --git a/src/hs-client.cpp b/src/hs-client.cpp
index 5da52bb..efc36b8 100644
--- a/src/hs-client.cpp
+++ b/src/hs-client.cpp
@@ -171,20 +171,37 @@ int HS_Client::on_screen_reply(afb_req_t request)
int HS_Client::subscribe(afb_req_t request)
{
int ret = 0;
- const char *value = afb_req_value(request, _event);
- if(value) {
- AFB_INFO("subscribe event %s", value);
- if(!isSupportEvent(value)) {
- AFB_WARNING("subscibe event isn't existing.");
- ret = AFB_EVENT_BAD_REQUEST;
+ struct json_object *ev_obj, *req_obj = afb_req_json(request);
+ if(json_object_object_get_ex(req_obj, _event, &ev_obj)) {
+ std::unordered_set<std::string> ev_set;
+ if(json_object_get_type(ev_obj) == json_type_string) {
+ ev_set.insert(json_object_get_string(ev_obj));
+ }
+ else if(json_object_get_type(ev_obj) == json_type_array) {
+ int array_len = json_object_array_length(ev_obj);
+ for (int i = 0; i < array_len; ++i) {
+ struct json_object *obj = json_object_array_get_idx(ev_obj, i);
+ ev_set.insert(json_object_get_string(obj));
+ }
}
else {
- event_list.insert(std::string(value));
- if(!subscription) {
- ret = afb_req_subscribe(request, my_event);
- if(ret == 0) {
- subscription = true;
- }
+ AFB_WARNING("subscibe event type error.");
+ return AFB_EVENT_BAD_REQUEST;
+ }
+
+ if(!subscription) {
+ ret = afb_req_subscribe(request, my_event);
+ if(ret == 0) {
+ subscription = true;
+ }
+ }
+ for(auto &it : ev_set) {
+ AFB_INFO("subscribe event %s", it.c_str());
+ if(!isSupportEvent(it.c_str())) {
+ AFB_WARNING("subscibe event(%s) isn't existing.", it.c_str());
+ }
+ else {
+ event_list.insert(it.c_str());
}
}
}