-static int forwarder(int argc, char *argv[])
-{
- int i;
- int slaves_count;
- msg_host_t *slaves;
-
- { /* Process organization */
- slaves_count = argc - 1;
- slaves = xbt_new0(msg_host_t, slaves_count);
-
- for (i = 1; i < argc; i++) {
- slaves[i - 1] = MSG_host_by_name(argv[i]);
- if (slaves[i - 1] == NULL) {
- XBT_INFO("Unknown host %s. Stopping Now! ", argv[i]);
- abort();
- }
- }
- }
-
- i = 0;
- while (1) {
- msg_task_t task = NULL;
- int a;
- a = MSG_task_receive(&(task),MSG_host_get_name(MSG_host_self()));
- if (a == MSG_OK) {
- XBT_INFO("Received \"%s\"", MSG_task_get_name(task));
- if (MSG_task_get_data(task) == FINALIZE) {
- XBT_INFO("All tasks have been dispatched. Let's tell everybody the computation is over.");
- for (i = 0; i < slaves_count; i++)
- MSG_task_send(MSG_task_create("finalize", 0, 0, FINALIZE), MSG_host_get_name(slaves[i]));
- MSG_task_destroy(task);
- break;
- }
- XBT_INFO("Sending \"%s\" to \"%s\"", MSG_task_get_name(task), MSG_host_get_name(slaves[i % slaves_count]));
- MSG_task_send(task, MSG_host_get_name(slaves[i % slaves_count]));
- i++;
- } else {
- XBT_INFO("Hey ?! What's up ? ");
- xbt_die("Unexpected behavior");
- }
- }
- xbt_free(slaves);
-
- XBT_INFO("I'm done. See you!");
- return 0;
-}
-