#include <stdlib.h>
#include <signal.h>
-#include <gras.h>
+#include "gras.h"
-GRAS_LOG_NEW_DEFAULT_CATEGORY(Ping);
+GRAS_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 */
-
- TRY(gras_msgtype_declare("ping", gras_datadesc_by_name("int"), &msg_t));
- TRY(gras_msgtype_declare("pong", gras_datadesc_by_name("int"), &msg_t));
+void register_messages(void) {
- return no_error;
+ gras_msgtype_declare("ping", gras_datadesc_by_name("int"));
+ gras_msgtype_declare("pong", gras_datadesc_by_name("int"));
}
/* **********************************************************************
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));
int server (int argc,char *argv[]) {
gras_error_t errcode;
- server_data_t *g=gras_userdata_new(server_data_t);
+ server_data_t *g;
gras_msgtype_t *ping_msg=NULL;
int port = 4000;
+ gras_init(&argc,argv);
+ g=gras_userdata_new(server_data_t);
+
if (argc == 2) {
port=atoi(argv[1]);
}
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(5,0);
gras_socket_close(g->sock);
+ free(g);
+ gras_exit();
+ INFO0("SERVER: Done.");
return no_error;
}
int client(int argc,char *argv[]) {
gras_error_t errcode;
- client_data_t *g=gras_userdata_new(client_data_t);
+ client_data_t *g;
gras_socket_t *from;
int ping, pong;
- gras_msgtype_t *msg_ping_type, *msg_pong_type;
const char *host = "127.0.0.1";
int port = 4000;
- msg_ping_type = msg_pong_type = NULL;
+ gras_init(&argc, argv);
+ g=gras_userdata_new(client_data_t);
if (argc == 3) {
host=argv[1];
port=atoi(argv[2]);
}
- fprintf(stderr,"Launch client (server on %s:%d)",host,port);
- if (!gras_if_RL())
- gras_sleep(5,0); /* Wait for the server to be setup */
+ INFO2("Launch client (server on %s:%d)",host,port);
+ gras_os_sleep(5,0); /* Wait for the server to be setup */
if ((errcode=gras_socket_client(host,port,&(g->sock)))) {
ERROR1("Client: Unable to connect to the server. Got %s",
gras_error_name(errcode));
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));
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));
gras_socket_close(g->sock);
gras_socket_peer_name(from),gras_socket_peer_port(from));
gras_socket_close(g->sock);
+ free(g);
+ gras_exit();
INFO0("Client: Done.");
return 0;
}