Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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();
    }
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
    }
}
Exemplo n.º 5
0
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);
      }
  }
}
Exemplo n.º 6
0
JNIEXPORT jint JNICALL Java_ipc_java_IPC_IPC_1setContext (JNIEnv *env, jclass theClass,
						 jlong context)
{
  return IPC_setContext((IPC_CONTEXT_PTR)(size_t)context);
}