- if (size > 0) {
- struct afb_stub_ws *stubws = closure;
- struct readbuf rb = { .head = data, .end = data + size };
-
- pthread_mutex_lock(&stubws->mutex);
- switch (*rb.head++) {
- case CHAR_FOR_ANSWER_SUCCESS: /* success */
- client_reply_success(stubws, &rb);
- break;
- case CHAR_FOR_ANSWER_FAIL: /* fail */
- client_reply_fail(stubws, &rb);
- break;
- case CHAR_FOR_EVT_BROADCAST: /* broadcast */
- client_event_broadcast(stubws, &rb);
- break;
- case CHAR_FOR_EVT_ADD: /* creates the event */
- client_event_create(stubws, &rb);
- break;
- case CHAR_FOR_EVT_DEL: /* drops the event */
- client_event_drop(stubws, &rb);
- break;
- case CHAR_FOR_EVT_PUSH: /* pushs the event */
- client_event_push(stubws, &rb);
- break;
- case CHAR_FOR_EVT_SUBSCRIBE: /* subscribe event for a request */
- client_event_subscribe(stubws, &rb);
- break;
- case CHAR_FOR_EVT_UNSUBSCRIBE: /* unsubscribe event for a request */
- client_event_unsubscribe(stubws, &rb);
- break;
- case CHAR_FOR_SUBCALL_CALL: /* subcall */
- client_subcall(stubws, &rb);
- break;
- case CHAR_FOR_DESCRIPTION: /* description */
- client_on_description(stubws, &rb);
- break;
- default: /* unexpected message */
- /* TODO: close the connection */
- break;
- }
- pthread_mutex_unlock(&stubws->mutex);
- }
- free(data);