_1-bones_client.c
_1-bones_server.c
_1-bones_simulator.c
-_2-simple_client.c
-_2-simple_server.c
-_2-simple_simulator.c
+
2-simple.mk
2-simple.trace
2-simple_client
2-simple_server
2-simple_simulator
+_2-simple_client.c
+_2-simple_server.c
+_2-simple_simulator.c
+
3-args.mk
3-args.trace
3-args_client
_3-args_client.c
_3-args_server.c
_3-args_simulator.c
+
+4-callback.mk
+4-callback.trace
+4-callback_client
+4-callback_server
+4-callback_simulator
+_4-callback_client.c
+_4-callback_server.c
+_4-callback_simulator.c
--- /dev/null
+#include <gras.h>
+
+int server_hello_cb(gras_msg_cb_ctx_t ctx, void *payload) {
+ gras_socket_t client = gras_msg_cb_ctx_from(ctx);
+
+ fprintf(stderr,"Cool, we received the message from %s:%d.\n",
+ gras_socket_peer_name(client), gras_socket_peer_port(client));
+
+ return 1;
+} /* end_of_callback */
+
+int server(int argc, char *argv[]) {
+ gras_socket_t mysock; /* socket on which I listen */
+ gras_socket_t toclient; /* socket used to write to the client */
+
+ gras_init(&argc,argv);
+
+ gras_msgtype_declare("hello", NULL);
+ mysock = gras_socket_server(atoi(argv[1]));
+
+ gras_cb_register(gras_msgtype_by_name("hello"),&server_hello_cb);
+ gras_msg_handle(60);
+
+ gras_exit();
+ return 0;
+}
+
+int client(int argc, char *argv[]) {
+ gras_socket_t mysock; /* socket on which I listen */
+ gras_socket_t toserver; /* socket used to write to the server */
+
+ gras_init(&argc,argv);
+
+ gras_msgtype_declare("hello", NULL);
+ mysock = gras_socket_server_range(1024, 10000, 0, 0);
+
+ fprintf(stderr,"Client ready; listening on %d\n", gras_socket_my_port(mysock));
+
+ gras_os_sleep(1.5); /* sleep 1 second and half */
+ toserver = gras_socket_client(argv[1], atoi(argv[2]));
+
+ gras_msg_send(toserver,gras_msgtype_by_name("hello"), NULL);
+ fprintf(stderr,"That's it, we sent the data to the server on %s\n", gras_socket_peer_name(toserver));
+
+ gras_exit();
+ return 0;
+}
--- /dev/null
+$ ./test_server 12345 & ./test_client 127.0.0.1 12345
+Client ready; listening on 1024
+That's it, we sent the data to the server on 127.0.0.1
+[blaise:client:(19066) 0.000005] gras/gras.c:79: [gras/INFO] Exiting GRAS
+Cool, we received the message from 127.0.0.1:1024.
+[blaise:server:(19064) 0.000005] gras/gras.c:79: [gras/INFO] Exiting GRAS
+$ ./test_simulator platform.xml test.xml
+Client ready; listening on 1024
+That's it, we sent the data to the server on Jacquelin
+[Boivin:client:(2) 0.000000] gras/gras.c:79: [gras/INFO] Exiting GRAS
+Cool, we received the message from Boivin:1024.
+[Jacquelin:server:(1) 0.000000] gras/gras.c:79: [gras/INFO] Exiting GRAS
+[0.000000] msg/global.c:475: [msg_kernel/INFO] Congratulations ! Simulation terminated : all process are over
+$
# This works mainly on my box for now
export LD_LIBRARY_PATH=$(GRAS_ROOT)/lib
-all: 1-bones.output 2-simple.output 3-args.output
+all: 1-bones.output 2-simple.output 3-args.output 4-callback.output
veryclean: clean
rm *.output
3-args_client 3-args_server 3-args_simulator: _3-args_client.c _3-args_server.c _3-args_simulator.c
make -f 3-args.mk
-_3-args_client.c _3-args_server.c _3-args_simulator.c: 3-args.c test.xml
- ../../tools/gras/gras_stub_generator 3-args test.xml >/dev/null
+_3-args_client.c _3-args_server.c _3-args_simulator.c: 3-args.c 3-args.xml
+ ../../tools/gras/gras_stub_generator 3-args 3-args.xml >/dev/null
clean::
if [ -e 3-args.mk ] ; then make -f 3-args.mk clean; fi
rm -f _3-args_client.c _3-args_server.c _3-args_simulator.c 3-args.trace 3-args.mk
+# Lesson 4: callbacks
+########################################
+
+4-callback.output: 4-callback_client 4-callback_server 4-callback_simulator
+ echo '$$ ./test_server 12345 & ./test_client 127.0.0.1 12345' > $@
+ ./4-callback_server 12345 >> $@ 2>&1&
+ ./4-callback_client 127.0.0.1 12345 >> $@ 2>&1
+ sleep 1
+ echo '$$ ./test_simulator platform.xml test.xml' >> $@
+ ./4-callback_simulator gtut-platform.xml 3-args.xml >> $@ 2>&1
+ echo '$$' >> $@
+
+4-callback_client 4-callback_server 4-callback_simulator: _4-callback_client.c _4-callback_server.c _4-callback_simulator.c
+ make -f 4-callback.mk
+
+_4-callback_client.c _4-callback_server.c _4-callback_simulator.c: 4-callback.c 3-args.xml
+ ../../tools/gras/gras_stub_generator 4-callback 3-args.xml >/dev/null
+
+clean::
+ if [ -e 4-callback.mk ] ; then make -f 4-callback.mk clean; fi
+ rm -f _4-callback_client.c _4-callback_server.c _4-callback_simulator.c 4-callback.trace 4-callback.mk
+