int main(int argc, char *argv[]) { num_contexts = argc-1; context = (IPC_CONTEXT_PTR *)calloc(num_contexts, sizeof(IPC_CONTEXT_PTR)); /* check_alloc checked */ IPC_setVerbosity(IPC_Print_Warnings); for (cur_context = 0; cur_context < num_contexts; cur_context++) { IPC_connectModule(argv[0], argv[cur_context+1]); context[cur_context] = IPC_getContext(); #if (defined(__x86_64__)) IPC_subscribe(CARMEN_TEST_IPC_NAME, msgHandler, (void *)(long)cur_context); #else IPC_subscribe(CARMEN_TEST_IPC_NAME, msgHandler, (void *)cur_context); #endif IPC_setMsgQueueLength(CARMEN_TEST_IPC_NAME, 1); } x_ipcRegisterExitProc(handle_exit); while (1) { for (cur_context = 0; cur_context < num_contexts; cur_context++) { fprintf(stderr, "chunk %d\n", cur_context); if (context[cur_context] != NULL) { IPC_setContext(context[cur_context]); IPC_listenClear(0); sleep(1); } } } return 0; }
void carmen_multicentral_subscribe_messages(carmen_centrallist_p centrallist, void (*subscribe_func)(void)) { int i; for(i = 0; i < centrallist->num_centrals; i++) if(centrallist->central[i].connected) { IPC_setContext(centrallist->central[i].context); subscribe_func(); } }
static void handle_exit(void) { fprintf(stderr, "Caught exit on %d.\n", cur_context); context[cur_context] = NULL; if (cur_context == num_contexts-1) cur_context = 0; else cur_context++; IPC_setContext(context[cur_context]); fprintf(stderr, "Set context to %d.\n", cur_context); return; }
void carmen_multicentral_get_params(carmen_centrallist_p centrallist, int argc, char **argv, void (*param_func)(int, char **)) { int i; /* get parameters from first valid central */ for(i = 0; i < centrallist->num_centrals; i++) if(centrallist->central[i].connected) { IPC_setContext(centrallist->central[i].context); carmen_param_check_version(argv[0]); param_func(argc, argv); break; } }
void carmen_multicentral_ipc_sleep(carmen_centrallist_p centrallist, double sleep_time) { int i, count = 0; for(i = 0; i < centrallist->num_centrals; i++) if(centrallist->central[i].connected) count++; if(count == 0) usleep((int)(sleep_time * 1e6)); else { /* handle IPC messages for each central */ for(i = 0; i < centrallist->num_centrals; i++) if(centrallist->central[i].connected) { IPC_setContext(centrallist->central[i].context); carmen_ipc_sleep(sleep_time / count); } } }
JNIEXPORT jint JNICALL Java_ipc_java_IPC_IPC_1setContext (JNIEnv *env, jclass theClass, jlong context) { return IPC_setContext((IPC_CONTEXT_PTR)(size_t)context); }