X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c8c8c7f474f9ee9df9289b977a5477b7d2b88a86..dc35ba75078e8ed895386c9be316774d3235f869:/include/gras/messages.h diff --git a/include/gras/messages.h b/include/gras/messages.h index d4b768a81d..ded4199309 100644 --- a/include/gras/messages.h +++ b/include/gras/messages.h @@ -71,28 +71,6 @@ typedef struct s_gras_msgtype *gras_msgtype_t; gras_msgtype_t gras_msgtype_by_namev(const char *name, short int version); gras_msgtype_t gras_msgtype_by_id(int id); -/** @} */ -/** @defgroup GRAS_msg_rpcdecl RPC declaration - * @ingroup GRAS_msg - * - * Remote Procedure Call (RPC) are a classical mecanism to request a service - * from a remote host. Using this set of functions, you let GRAS doing most of - * the work of sending the request, wait for an answer, make sure it is the - * right answer from the right host and so on. Any exception raised on the - * server is also passed over the network to the client. - */ -/** @{ */ - -void gras_msgtype_declare_rpc(const char *name, - gras_datadesc_type_t payload_request, - gras_datadesc_type_t payload_answer); - -void gras_msgtype_declare_rpc_v(const char *name, - short int version, - gras_datadesc_type_t payload_request, - gras_datadesc_type_t payload_answer); - - /** @} */ /** @defgroup GRAS_msg_cb Callback declaration and use * @ingroup GRAS_msg @@ -114,7 +92,13 @@ void gras_msgtype_declare_rpc_v(const char *name, typedef struct s_gras_msg_cb_ctx *gras_msg_cb_ctx_t; gras_socket_t gras_msg_cb_ctx_from(gras_msg_cb_ctx_t ctx); - +gras_msg_cb_ctx_t gras_msg_cb_ctx_new(gras_socket_t expe, + gras_msgtype_t msgtype, + unsigned long int ID, + double timeout); +void gras_msg_cb_ctx_free(gras_msg_cb_ctx_t ctx) ; + + /** \brief Type of message callback functions. * * \param expeditor: a socket to contact who sent this message @@ -138,23 +122,6 @@ gras_socket_t gras_msg_cb_ctx_from(gras_msg_cb_ctx_t ctx); /** @} */ -/** @defgroup GRAS_msg_rpc RPC specific functions - * @ingroup GRAS_msg - */ -/** @{ */ - -/* client side */ -void gras_msg_rpccall(gras_socket_t server, - double timeOut, - gras_msgtype_t msgtype, - void *request, void *answer); - -/* server side */ -void gras_msg_rpcreturn(double timeOut, gras_msg_cb_ctx_t ctx,void *answer); - - -/** @} */ - /** @defgroup GRAS_msg_exchange Message exchange * @ingroup GRAS_msg * @@ -169,9 +136,56 @@ void gras_msg_rpcreturn(double timeOut, gras_msg_cb_ctx_t ctx,void *answer); gras_msgtype_t msgt_want, gras_socket_t *expeditor, void *payload); + void gras_msg_handleall(double period); void gras_msg_handle(double timeOut); /** @} */ + +/** @defgroup GRAS_msg_rpc RPC specific functions + * @ingroup GRAS_msg + * + * Remote Procedure Call (RPC) are a classical mecanism to request a service + * from a remote host. Using this set of functions, you let GRAS doing most of + * the work of sending the request, wait for an answer, make sure it is the + * right answer from the right host and so on. Any exception raised on the + * server is also passed over the network to the client. + * + * Callbacks are attached to RPC incomming messages the regular way using + * \ref gras_cb_register. + * + * For an example of use, check the examples/gras/rpc directory of the distribution. + */ +/** @{ */ + +/* declaration */ +void gras_msgtype_declare_rpc(const char *name, + gras_datadesc_type_t payload_request, + gras_datadesc_type_t payload_answer); + +void gras_msgtype_declare_rpc_v(const char *name, + short int version, + gras_datadesc_type_t payload_request, + gras_datadesc_type_t payload_answer); + +/* client side */ +void gras_msg_rpccall(gras_socket_t server, + double timeOut, + gras_msgtype_t msgtype, + void *request, void *answer); +gras_msg_cb_ctx_t +gras_msg_rpc_async_call(gras_socket_t server, + double timeOut, + gras_msgtype_t msgtype, + void *request); +void gras_msg_rpc_async_wait(gras_msg_cb_ctx_t ctx, + void *answer); + +/* server side */ +void gras_msg_rpcreturn(double timeOut, gras_msg_cb_ctx_t ctx,void *answer); + + +/** @} */ + /** @defgroup GRAS_msg_exchangeadv Message exchange (advanced interface) * @ingroup GRAS_msg * @@ -213,12 +227,18 @@ typedef struct { typedef int (*gras_msg_filter_t)(gras_msg_t msg,void *ctx); - void gras_msg_wait_ext(double timeout, - gras_msgtype_t msgt_want, - gras_socket_t expe_want, - gras_msg_filter_t filter, - void *filter_ctx, - gras_msg_t msg_got); +void gras_msg_wait_ext(double timeout, + gras_msgtype_t msgt_want, + gras_socket_t expe_want, + gras_msg_filter_t filter, + void *filter_ctx, + gras_msg_t msg_got); + +void gras_msg_wait_or(double timeout, + xbt_dynar_t msgt_want, + gras_msg_cb_ctx_t *ctx, + int *msgt_got, + void *payload); /* @} */