int cometd_listener_fire(GHashTable* listeners, const char* channel, const cometd* h, JsonNode* message) { g_return_val_if_fail(listeners != NULL, ECOMETD_UNKNOWN); g_return_val_if_fail(channel != NULL, ECOMETD_UNKNOWN); GList* list = cometd_listener_get(listeners, channel); // If the list is NULL then, then there are no subscriptions. if (list == NULL) { return COMETD_SUCCESS; } GList* item; for (item = list; item; item = g_list_next(item)) { cometd_subscription* s = (cometd_subscription*) item->data; if (s->callback(h, message) != COMETD_SUCCESS) { goto error; } } g_list_free(list); return COMETD_SUCCESS; error: return ECOMETD_UNKNOWN; }
END_TEST START_TEST (test_cometd_listener_get) { cometd_subscription *s1, *s2, *s3, *s4; s1 = cometd_listener_add(listeners, "/foo/*", test_empty_handler); s2 = cometd_listener_add(listeners, "/**", test_empty_handler); s3 = cometd_listener_add(listeners, "/foo/bar/baz/*", test_empty_handler); s4 = cometd_listener_add(listeners, "/foo/bar/baz/bang", test_empty_handler); GList* subscriptions = cometd_listener_get(listeners, "/foo/bar/baz/bang"); fail_if(subscriptions == NULL); ck_assert_int_eq(3, g_list_length(subscriptions)); fail_if(g_list_find(subscriptions, s2) == NULL); fail_if(g_list_find(subscriptions, s3) == NULL); fail_if(g_list_find(subscriptions, s4) == NULL); g_list_free(subscriptions); }