Beispiel #1
0
qeo_retcode_t qeo_json_state_reader_foreach(const qeo_json_state_reader_t *reader,
                                            qeo_json_iterate_callback     cb,
                                            uintptr_t                     userdata)
{
    qeojson_reader_t  *jsonreader = (qeojson_reader_t *) reader;
    qeo_retcode_t     rc          = QEO_OK;
    char              *datastr    = NULL;

    if ((NULL == reader) || (NULL == cb)) {
        rc = QEO_EINVAL;
    }
    else {
        qeocore_filter_t      filter  = { 0 };
        qeo_iterate_action_t  action  = QEO_ITERATE_CONTINUE;
        qeocore_data_t        *data;

        data = qeocore_reader_data_new(jsonreader->reader);
        if (NULL == data) {
            rc = QEO_ENOMEM;
        }
        else {
            json_reader_dispatcher_cookie_t *dc = (json_reader_dispatcher_cookie_t *)qeocore_reader_get_userdata(jsonreader->reader);
            filter.instance_handle = DDS_HANDLE_NIL;
            while (1) {
                rc = qeocore_reader_read(jsonreader->reader, &filter, data);
                if (QEO_OK == rc) {
                    filter.instance_handle = qeocore_data_get_instance_handle(data);
                    datastr = json_from_data(dc->typedesc, data);
                    action  = cb(datastr, userdata);
                    free(datastr);
                    if (QEO_ITERATE_CONTINUE == action) {
                        qeocore_data_reset(data);
                        continue;
                    }
                }
                else if (QEO_ENODATA == rc) {
                    rc = QEO_OK;
                }
                /* QEO_ENODATA or ITERATE_ABORT or error */
                break;
            }
            qeocore_data_free(data);
        }
    }
    return rc;
}
Beispiel #2
0
static int fwd_server_count_instances(const qeocore_reader_t *reader)
{
    qeo_retcode_t rc = QEO_OK;
    qeocore_filter_t filter = { 0 };
    qeocore_data_t *data;
    int cnt = 0;

    data = qeocore_reader_data_new(reader);
    if (NULL != data) {
        filter.instance_handle = DDS_HANDLE_NIL;
        while (1) {
            rc = qeocore_reader_read(reader, &filter, data);
            if (QEO_OK == rc) {
                filter.instance_handle = qeocore_data_get_instance_handle(data);
                cnt++;
#ifdef DEBUG
                {
                    const org_qeo_system_Forwarder_t *fwd = qeocore_data_get_data(data);

                    qeo_log_d("forwarder %d : id=%" PRIx64 " -> %s", cnt, fwd->deviceId,
                              (fwd->deviceId == reader->entity.factory->qeo_id.device_id ? "self" : "other"));
                }
#endif
                qeocore_data_reset(data);
                continue;
            }
            else if (QEO_ENODATA == rc) {
                rc = QEO_OK;
            }
            /* QEO_ENODATA or error */
            break;
        }
        qeocore_data_free(data);
    }
    if (QEO_OK == rc) {
        qeo_log_i("found %d local forwarders", cnt);
    }
    else {
        qeo_log_e("failed to read all local forwarders");
    }
    return cnt;
}
Beispiel #3
0
qeo_retcode_t qeo_state_reader_foreach(const qeo_state_reader_t *reader,
                                       qeo_iterate_callback cb,
                                       uintptr_t userdata)
{
    qeocore_reader_t *r = (qeocore_reader_t *)reader;
    qeo_retcode_t rc = QEO_OK;

    if ((NULL == r) || (NULL == cb)) {
        rc = QEO_EINVAL;
    }
    else {
        qeocore_filter_t filter = { 0 };
        qeo_iterate_action_t action = QEO_ITERATE_CONTINUE;
        qeocore_data_t *data;

        data = qeocore_reader_data_new(r);
        if (NULL == data) {
            rc = QEO_ENOMEM;
        }
        else {
            filter.instance_handle = DDS_HANDLE_NIL;
            while (1) {
                rc = qeocore_reader_read(r, &filter, data);
                if (QEO_OK == rc) {
                    filter.instance_handle = qeocore_data_get_instance_handle(data);
                    if (QEO_ITERATE_CONTINUE == action) {
                        action = cb(qeocore_data_get_data(data), userdata);
                    }
                    qeocore_data_reset(data);
                }
                else if (QEO_ENODATA == rc) {
                    rc = QEO_OK;
                    break;
                }
            }
            qeocore_data_free(data);
        }
    }
    return rc;
}