-static void register_messages(void) {
- gras_datadesc_type_t result_type;
- gras_datadesc_type_t init_data_type;
- gras_datadesc_set_const("PROC_MATRIX_SIZE",PROC_MATRIX_SIZE);
- result_type=gras_datadesc_by_symbol(s_result);
- init_data_type=gras_datadesc_by_symbol(s_init_data);
-
- gras_msgtype_declare("result", result_type); // receive a final result from slave
- gras_msgtype_declare("init_data", init_data_type); // send from master to slave to initialize data bA,bB
-
- gras_msgtype_declare("ask_result", gras_datadesc_by_name("int")); // send from master to slave to ask a final result
- gras_msgtype_declare("step", gras_datadesc_by_name("int"));// send from master to slave to indicate the begining of step
- gras_msgtype_declare("step_ack", gras_datadesc_by_name("int"));//send from slave to master to indicate the end of the current step
- gras_msgtype_declare("dataA", gras_datadesc_by_name("double"));// send data between slave
- gras_msgtype_declare("dataB", gras_datadesc_by_name("double"));// send data between slave
+static void register_messages(void)
+{
+ xbt_datadesc_type_t result_type;
+ xbt_datadesc_type_t pmm_assignment_type;
+
+ xbt_datadesc_set_const("NEIGHBOR_COUNT", NEIGHBOR_COUNT);
+ result_type = xbt_datadesc_by_symbol(s_result);
+ pmm_assignment_type = xbt_datadesc_by_symbol(s_pmm_assignment);
+
+ /* receive a final result from slave */
+ gras_msgtype_declare("result", result_type);
+
+ /* send from master to slave to assign a position and some data */
+ gras_msgtype_declare("pmm_slave", pmm_assignment_type);
+
+ /* send data between slaves */
+ gras_msgtype_declare("dataA",
+ xbt_datadesc_matrix(xbt_datadesc_by_name
+ ("double"), NULL));
+ gras_msgtype_declare("dataB",
+ xbt_datadesc_matrix(xbt_datadesc_by_name
+ ("double"), NULL));
+
+ /* synchronization message */
+ gras_msgtype_declare("pmm_sync", 0);
+}
+
+static xbt_socket_t try_gras_socket_client_from_string(const char *host)
+{
+ volatile xbt_socket_t sock = NULL;
+ xbt_ex_t e;
+ TRY {
+ sock = gras_socket_client_from_string(host);
+ }
+ CATCH(e) {
+ if (e.category != system_error)
+ /* dunno what happened, let the exception go through */
+ RETHROWF("Unable to connect to the server: %s");
+ xbt_ex_free(e);
+ }
+ return sock;
+}
+
+static void my_gras_msg_wait(double timeout, const char* msgt_want,
+ xbt_socket_t* expeditor, void *payload,
+ const char *error_msg)
+{
+ TRY {
+ gras_msg_wait(timeout, msgt_want, expeditor, payload);
+ }
+ CATCH_ANONYMOUS {
+ RETHROWF("%s: %s", error_msg);
+ }