예제 #1
0
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;
}
예제 #2
0
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);
}