/* ping - ping/pong demo of GRAS features */
-/* Authors: Martin Quinson */
-/* Copyright (C) 2003 the OURAGAN project. */
+/* Copyright (c) 2003, 2004 Martin Quinson. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
- under the terms of the license (GNU LGPL) which comes with this package. */
+ * under the terms of the license (GNU LGPL) which comes with this package. */
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
-#include <gras.h>
+#include "gras.h"
-GRAS_LOG_NEW_DEFAULT_CATEGORY(Ping);
+XBT_LOG_NEW_DEFAULT_CATEGORY(Ping,"Messages specific to this example");
/* **********************************************************************
* Comon code
} msg_ping_t;
/* Function prototypes */
-gras_error_t register_messages(void);
+void register_messages(void);
/* Code */
-gras_error_t register_messages(void) {
- gras_error_t errcode;
- gras_msgtype_t *msg_t; /* FIXME: not needed */
+void register_messages(void) {
- TRY(gras_msgtype_declare("ping", gras_datadesc_by_name("int"), &msg_t));
- TRY(gras_msgtype_declare("pong", gras_datadesc_by_name("int"), &msg_t));
-
- return no_error;
+ gras_msgtype_declare("ping", gras_datadesc_by_name("int"));
+ gras_msgtype_declare("pong", gras_datadesc_by_name("int"));
}
/* **********************************************************************
/* Global private data */
typedef struct {
- gras_socket_t *sock;
+ gras_socket_t sock;
int endcondition;
} server_data_t;
/* Function prototypes */
-int server_cb_ping_handler(gras_socket_t *expeditor,
- void *payload_data);
+int server_cb_ping_handler(gras_socket_t expeditor,
+ void *payload_data);
int server (int argc,char *argv[]);
-int server_cb_ping_handler(gras_socket_t *expeditor,
- void *payload_data) {
+int server_cb_ping_handler(gras_socket_t expeditor,
+ void *payload_data) {
- gras_error_t errcode;
+ xbt_error_t errcode;
int msg=*(int*)payload_data;
gras_msgtype_t *pong_t=NULL;
gras_socket_peer_port(expeditor));
msg = 4321;
- TRY(gras_msgtype_by_name("pong",&pong_t));
- errcode = gras_msg_send(expeditor, pong_t, &msg);
+ errcode = gras_msg_send(expeditor, gras_msgtype_by_name("pong"), &msg);
if (errcode != no_error) {
- ERROR1("SERVER: Unable answer with PONG: %s\n", gras_error_name(errcode));
+ ERROR1("SERVER: Unable answer with PONG: %s\n", xbt_error_name(errcode));
gras_socket_close(g->sock);
return 1;
}
}
int server (int argc,char *argv[]) {
- gras_error_t errcode;
+ xbt_error_t errcode;
server_data_t *g;
gras_msgtype_t *ping_msg=NULL;
int port = 4000;
- gras_init(&argc,argv);
+ gras_init(&argc,argv, NULL);
g=gras_userdata_new(server_data_t);
if (argc == 2) {
if ((errcode=gras_socket_server(port,&(g->sock)))) {
CRITICAL1("Error %s encountered while opening the server socket",
- gras_error_name(errcode));
+ xbt_error_name(errcode));
return 1;
}
- TRYFAIL(register_messages());
- TRYFAIL(register_messages());
- TRYFAIL(gras_msgtype_by_name("ping",&ping_msg));
- TRYFAIL(gras_cb_register(ping_msg,&server_cb_ping_handler));
+ register_messages();
+ register_messages();
+ gras_cb_register(gras_msgtype_by_name("ping"),&server_cb_ping_handler);
INFO1("SERVER: >>>>>>>> Listening on port %d <<<<<<<<",
gras_socket_my_port(g->sock));
g->endcondition=0;
- while (1) {
- errcode = gras_msg_handle(10.0);
- if (errcode != no_error && errcode != timeout_error)
- return errcode;
- if (g->endcondition)
- break;
- }
+ errcode = gras_msg_handle(600.0);
+ if (errcode != no_error)
+ return errcode;
+ if (g->endcondition)
if (!gras_if_RL())
- gras_sleep(5,0);
- INFO0("SERVER: Done.");
+ gras_os_sleep(1,0);
+
gras_socket_close(g->sock);
free(g);
gras_exit();
+ INFO0("SERVER: Done.");
return no_error;
}
/* Global private data */
typedef struct {
- gras_socket_t *sock;
+ gras_socket_t sock;
} client_data_t;
/* Function prototypes */
int client (int argc,char *argv[]);
int client(int argc,char *argv[]) {
- gras_error_t errcode;
+ xbt_error_t errcode;
client_data_t *g;
- gras_socket_t *from;
+ gras_socket_t from;
int ping, pong;
- gras_msgtype_t *msg_ping_type=NULL, *msg_pong_type=NULL;
const char *host = "127.0.0.1";
int port = 4000;
- gras_init(&argc, argv);
+ gras_init(&argc, argv, NULL);
g=gras_userdata_new(client_data_t);
if (argc == 3) {
}
INFO2("Launch client (server on %s:%d)",host,port);
- if (!gras_if_RL())
- gras_sleep(5,0); /* Wait for the server to be setup */
+ gras_os_sleep(1,0); /* Wait for the server startup */
if ((errcode=gras_socket_client(host,port,&(g->sock)))) {
ERROR1("Client: Unable to connect to the server. Got %s",
- gras_error_name(errcode));
+ xbt_error_name(errcode));
return 1;
}
INFO2("Client: Connected to %s:%d.",host,port);
- TRY(register_messages());
- TRY(gras_msgtype_by_name("ping",&msg_ping_type));
- TRY(gras_msgtype_by_name("pong",&msg_pong_type));
+ register_messages();
INFO2("Client: >>>>>>>> Connected to server which is on %s:%d <<<<<<<<",
gras_socket_peer_name(g->sock),gras_socket_peer_port(g->sock));
ping = 1234;
- errcode = gras_msg_send(g->sock, msg_ping_type, &ping);
+ errcode = gras_msg_send(g->sock, gras_msgtype_by_name("ping"), &ping);
if (errcode != no_error) {
fprintf(stderr, "Client: Unable send PING to server (%s)\n",
- gras_error_name(errcode));
+ xbt_error_name(errcode));
gras_socket_close(g->sock);
return 1;
}
ping,
gras_socket_peer_name(g->sock),gras_socket_peer_port(g->sock));
- if ((errcode=gras_msg_wait(6000,
- msg_pong_type,&from,&pong))) {
+ if ((errcode=gras_msg_wait(6000,gras_msgtype_by_name("pong"),
+ &from,&pong))) {
ERROR1("Client: Why can't I get my PONG message like everyone else (%s)?",
- gras_error_name(errcode));
+ xbt_error_name(errcode));
gras_socket_close(g->sock);
return 1;
}
gras_socket_close(g->sock);
free(g);
+ gras_exit();
INFO0("Client: Done.");
return 0;
}