sp_rpc.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef SP_RPC_H
  2. #define SP_RPC_H
  3. #pragma once
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. /* remote procedure call mechanism to sp shell */
  8. /* server side (shell) */
  9. typedef struct iobuffer_t iobuffer_t;
  10. typedef struct sp_svc_t sp_svc_t;
  11. typedef struct sp_rpc_server_t sp_rpc_server_t;
  12. typedef struct sp_rpc_server_callback {
  13. void (*on_info)(sp_rpc_server_t *server, int epid, int svc_id, int call_type, iobuffer_t **info_pkt, void *user_data);
  14. 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);
  15. void (*on_destroy)(sp_rpc_server_t *server, void *user_data);
  16. void *user_data;
  17. }sp_rpc_server_callback;
  18. SPBASE_API int sp_rpc_server_create(sp_svc_t *svc, sp_rpc_server_callback *cb, sp_rpc_server_t **p_server);
  19. SPBASE_API void sp_rpc_server_destroy(sp_rpc_server_t *server);
  20. SPBASE_API int sp_rpc_server_start(sp_rpc_server_t *server);
  21. SPBASE_API int sp_rpc_server_stop(sp_rpc_server_t *server);
  22. SPBASE_API sp_svc_t *sp_rpc_server_get_svc(sp_rpc_server_t *server);
  23. 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);
  24. /* client side (entity) */
  25. typedef struct sp_rpc_client_t sp_rpc_client_t;
  26. typedef struct sp_rpc_client_mgr_t sp_rpc_client_mgr_t;
  27. typedef struct sp_rpc_client_mgr_callback {
  28. 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);
  29. void (*on_destroy)(sp_rpc_client_mgr_t *mgr, void *user_data);
  30. void *user_data;
  31. }sp_rpc_client_mgr_callback;
  32. int sp_rpc_client_mgr_create(sp_svc_t *svc, sp_rpc_client_mgr_callback *cb, sp_rpc_client_mgr_t **p_mgr);
  33. void sp_rpc_client_mgr_destroy(sp_rpc_client_mgr_t *mgr);
  34. int sp_rpc_client_mgr_start(sp_rpc_client_mgr_t *mgr);
  35. int sp_rpc_client_mgr_stop(sp_rpc_client_mgr_t *mgr);
  36. sp_svc_t *sp_rpc_client_mgr_get_svc(sp_rpc_client_mgr_t *mgr);
  37. int sp_rpc_client_mgr_cancel_all(sp_rpc_client_mgr_t *mgr);
  38. int sp_rpc_client_mgr_get_client_cnt(sp_rpc_client_mgr_t *mgr);
  39. 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);
  40. 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);
  41. typedef struct sp_rpc_client_callback {
  42. void (*on_ans)(sp_rpc_client_t *client, int error, iobuffer_t **ans_pkt, void *user_data);
  43. void (*on_destroy)(sp_rpc_client_t *client, void *user_data);
  44. void *user_data;
  45. }sp_rpc_client_callback;
  46. 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);
  47. void sp_rpc_client_destroy(sp_rpc_client_t *client);
  48. int sp_rpc_client_close(sp_rpc_client_t *client);
  49. int sp_rpc_client_async_call(sp_rpc_client_t *client, iobuffer_t **req_pkt);
  50. int sp_rpc_client_get_rpc_id(sp_rpc_client_t *client);
  51. int sp_rpc_client_get_remote_epid(sp_rpc_client_t *client);
  52. int sp_rpc_client_get_remote_svc_id(sp_rpc_client_t *client);
  53. #ifdef __cplusplus
  54. } // extern "C" {
  55. #endif
  56. #endif // SP_RPC_H