Ejemplo n.º 1
0
int cc_client_Calculator_new(
    const char *address, void *data, struct cc_client_Calculator **instance)
{
    int result;
    struct cc_client_Calculator *ii;

    CC_LOG_DEBUG("invoked cc_client_Calculator_new\n");
    assert(address);
    assert(instance);

    ii = (struct cc_client_Calculator *) calloc(1, sizeof(*ii));
    if (!ii) {
        CC_LOG_ERROR("failed to allocate instance memory\n");
        return -ENOMEM;
    }

    result = cc_instance_new(address, false, &ii->instance);
    if (result < 0) {
        CC_LOG_ERROR("failed to create instance: %s\n", strerror(-result));
        goto fail;
    }
    ii->data = data;

    *instance = ii;
    return 0;

fail:
    ii = cc_client_Calculator_free(ii);
    return result;
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
    int result = 0;
    struct cc_event_context *context = NULL;
    sd_event *event = NULL;
    struct cc_client_Calculator *instance1 = NULL, *instance2 = NULL;
    double value = 3.14159265;
    int32_t whole = 0;
    int32_t fraction = 0;

    CC_LOG_OPEN("simpleclient");
    printf("Started simpleclient\n");

    result = cc_backend_startup();
    if (result < 0) {
        printf("unable to startup the backend: %s\n", strerror(-result));
        goto fail;
    }
    result = cc_client_Calculator_new(
        "org.genivi.capic.Server:/instance1:org.genivi.capic.Calculator",
        NULL, &instance1);
    if (result < 0) {
        printf("unable to create client instance '/instance1': %s\n", strerror(-result));
        goto fail;
    }
    result = cc_client_Calculator_new(
        "org.genivi.capic.Server:/instance2:org.genivi.capic.Calculator",
        NULL, &instance2);
    if (result < 0) {
        printf("unable to create client instance '/instance2': %s\n", strerror(-result));
        goto fail;
    }

    result = cc_backend_get_event_context(&context);
    if (result < 0) {
        printf("unable to get backend event context: %s\n", strerror(-result));
        goto fail;
    }
    event = (sd_event *) cc_event_get_native(context);
    assert(event);
    sd_event_ref(event);

    printf("invoking method instance1.split() with value=%g\n", value);
    printf(
        "expecting to receive whole=%d, fraction=%d\n", (int32_t)value,
        (int32_t)((value - (double)(int32_t)value) * 1.0e+9));
    result = cc_Calculator_split(instance1, value, &whole, &fraction);
    if (result < 0) {
        printf("failed while calling cc_Calculator_split(): %s\n", strerror(-result));
        goto fail;
    }
    printf("received whole=%d, fraction=%d\n", whole, fraction);

    printf("invoking method instance2.split() with value=%g\n", value);
    printf(
        "expecting to receive whole=%d, fraction=%d\n", (int32_t)value,
        (int32_t)((value - (double)(int32_t)value) * 1.0e+9));
    result = cc_Calculator_split_async(
        instance2, value, &complete_Calculator_split);
    if (result < 0) {
        printf("unable to issue cc_Calculator_split_async(): %s\n", strerror(-result));
        goto fail;
    }
    result = cc_Calculator_split(instance2, value, &whole, &fraction);
    if (result >= 0) {
        printf("invoking method with pending reply succeeded unexpectedly");
        goto fail;
    }
    assert(result == -EBUSY);
    result = sd_event_run(event, (uint64_t) -1);
    if (result < 0) {
        printf(
            "unable to complete cc_Calculator_split_async(): %s\n", strerror(-result));
        goto fail;
    }

fail:
    instance2 = cc_client_Calculator_free(instance2);
    instance1 = cc_client_Calculator_free(instance1);
    cc_backend_shutdown();

    CC_LOG_CLOSE();
    printf("exiting simpleclient\n");

    return result;
}