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; }
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; }