JsonNode* cometd_msg_extract_connect(JsonNode* payload) { JsonNode* connect = NULL; JsonArray* arr = json_node_get_array(payload); GList* msgs = json_array_get_elements(arr); gint i; gint index = -1; GList* item; for (i = 0, item = msgs; item; item = g_list_next(item), ++i) { JsonNode* msg = item->data; char* channel = cometd_msg_channel(msg); if (strcmp(COMETD_CHANNEL_META_CONNECT, channel) == 0) index = i; free(channel); } if (index > -1) { connect = json_array_dup_element(arr, index); json_array_remove_element(arr, index); } g_list_free(msgs); return connect; }
int cometd_process_msg(const cometd* h, JsonNode* msg) { cometd_ext_fire_incoming(h->exts, h, msg); char* channel = cometd_msg_channel(msg); int ret = cometd_fire_listeners(h, channel, msg); free(channel); return ret; }