#ifndef SP_RPC_H #define SP_RPC_H #pragma once #ifdef __cplusplus extern "C" { #endif /* remote procedure call mechanism to sp shell */ /* server side (shell) */ typedef struct iobuffer_t iobuffer_t; typedef struct sp_svc_t sp_svc_t; typedef struct sp_rpc_server_t sp_rpc_server_t; typedef struct sp_rpc_server_callback { void (*on_info)(sp_rpc_server_t *server, int epid, int svc_id, int call_type, iobuffer_t **info_pkt, void *user_data); void (*on_req)(sp_rpc_server_t *server, int epid, int svc_id, int rpc_id, int call_type, iobuffer_t **req_pkt, void *user_data); void (*on_destroy)(sp_rpc_server_t *server, void *user_data); void *user_data; }sp_rpc_server_callback; SPBASE_API int sp_rpc_server_create(sp_svc_t *svc, sp_rpc_server_callback *cb, sp_rpc_server_t **p_server); SPBASE_API void sp_rpc_server_destroy(sp_rpc_server_t *server); SPBASE_API int sp_rpc_server_start(sp_rpc_server_t *server); SPBASE_API int sp_rpc_server_stop(sp_rpc_server_t *server); SPBASE_API sp_svc_t *sp_rpc_server_get_svc(sp_rpc_server_t *server); SPBASE_API int sp_rpc_server_send_answer(sp_rpc_server_t *server, int epid, int svc_id, int rpc_id, iobuffer_t **ans_pkt); /* client side (entity) */ typedef struct sp_rpc_client_t sp_rpc_client_t; typedef struct sp_rpc_client_mgr_t sp_rpc_client_mgr_t; typedef struct sp_rpc_client_mgr_callback { void (*on_req)(sp_rpc_client_mgr_t *mgr, int epid, int svc_id, int rpc_id, int call_type, iobuffer_t **req_pkt, void *user_data); void (*on_destroy)(sp_rpc_client_mgr_t *mgr, void *user_data); void *user_data; }sp_rpc_client_mgr_callback; int sp_rpc_client_mgr_create(sp_svc_t *svc, sp_rpc_client_mgr_callback *cb, sp_rpc_client_mgr_t **p_mgr); void sp_rpc_client_mgr_destroy(sp_rpc_client_mgr_t *mgr); int sp_rpc_client_mgr_start(sp_rpc_client_mgr_t *mgr); int sp_rpc_client_mgr_stop(sp_rpc_client_mgr_t *mgr); sp_svc_t *sp_rpc_client_mgr_get_svc(sp_rpc_client_mgr_t *mgr); int sp_rpc_client_mgr_cancel_all(sp_rpc_client_mgr_t *mgr); int sp_rpc_client_mgr_get_client_cnt(sp_rpc_client_mgr_t *mgr); int sp_rpc_client_mgr_one_way_call(sp_rpc_client_mgr_t *mgr, int epid, int svc_id, int call_type, iobuffer_t **info_pkt); int sp_rpc_client_mgr_send_answer(sp_rpc_client_mgr_t *mgr, int epid, int svc_id, int rpc_id, iobuffer_t **ans_pkt); typedef struct sp_rpc_client_callback { void (*on_ans)(sp_rpc_client_t *client, int error, iobuffer_t **ans_pkt, void *user_data); void (*on_destroy)(sp_rpc_client_t *client, void *user_data); void *user_data; }sp_rpc_client_callback; int sp_rpc_client_create(sp_rpc_client_mgr_t *mgr, int epid, int svc_id, int call_type, sp_rpc_client_callback *cb, sp_rpc_client_t **p_client); void sp_rpc_client_destroy(sp_rpc_client_t *client); int sp_rpc_client_close(sp_rpc_client_t *client); int sp_rpc_client_async_call(sp_rpc_client_t *client, iobuffer_t **req_pkt); int sp_rpc_client_get_rpc_id(sp_rpc_client_t *client); int sp_rpc_client_get_remote_epid(sp_rpc_client_t *client); int sp_rpc_client_get_remote_svc_id(sp_rpc_client_t *client); #ifdef __cplusplus } // extern "C" { #endif #endif // SP_RPC_H