sp_bcm.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #ifndef SP_BCM_H
  2. #define SP_BCM_H
  3. #pragma once
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. #include "refcnt.h"
  8. #include "array.h"
  9. #include "sp_uid.h"
  10. /** broadcast message */
  11. typedef struct sp_bcm_client_t sp_bcm_client_t;
  12. typedef struct sp_bcm_listener_t sp_bcm_listener_t;
  13. typedef struct sp_bcm_daemon_t sp_bcm_daemon_t;
  14. typedef struct sp_svc_t sp_svc_t;
  15. typedef struct iobuffer_t iobuffer_t;
  16. typedef struct sp_bcm_listener_cb {
  17. void (*on_message)(sp_bcm_listener_t *listener, int from_client_id, int message_id, int message_sig, const void *buf, int len, void *user_data);
  18. void (*on_message_raw)(sp_bcm_listener_t *listener, int from_client_id, iobuffer_t **msg_pkt, void *user_data);
  19. void (*on_destroy)(sp_bcm_listener_t *listener, void *user_data);
  20. void *user_data;
  21. }sp_bcm_listener_cb;
  22. typedef struct sp_bcm_receiver_t {
  23. sp_uid_t id;
  24. int receiver_id;
  25. char *param;
  26. }sp_bcm_receiver_t;
  27. // client
  28. int sp_bcm_client_create(sp_svc_t *svc, sp_bcm_client_t **p_client);
  29. void sp_bcm_client_destroy(sp_bcm_client_t *client);
  30. int sp_bcm_client_bcast(sp_bcm_client_t *client, int message_id, int message_sig, iobuffer_t **p_pkt);
  31. // listener
  32. int sp_bcm_listener_create(sp_svc_t *svc, int target_ent_id, const char *param, const sp_bcm_listener_cb *cb, sp_bcm_listener_t **p_listener);
  33. void sp_bcm_listener_destroy(sp_bcm_listener_t *listener);
  34. int sp_bcm_listener_subscribe(sp_bcm_listener_t *listener, sp_uid_t *uid);
  35. int sp_bcm_listener_unsubscribe(sp_bcm_listener_t *listener);
  36. void sp_bcm_listener_set_tag(sp_bcm_listener_t *listener, void *tag);
  37. void* sp_bcm_listener_get_tag(sp_bcm_listener_t *listener);
  38. void sp_bcm_listener_get_uid(sp_bcm_listener_t *listener, sp_uid_t *uid);
  39. int sp_bcm_listener_get_target_entity_id(sp_bcm_listener_t *listener);
  40. DECLARE_REF_COUNT(sp_bcm_listener, sp_bcm_listener_t)
  41. // daemon
  42. SPBASE_API int sp_bcm_daemon_create(sp_svc_t *svc, sp_bcm_daemon_t **p_daemon);
  43. SPBASE_API int sp_bcm_deamon_refresh(sp_bcm_daemon_t* daemon);
  44. SPBASE_API void sp_bcm_daemon_destroy(sp_bcm_daemon_t *daemon);
  45. SPBASE_API array_header_t *sp_bcm_daemon_get_receiver(sp_bcm_daemon_t *daemon, int entity_id);
  46. SPBASE_API void sp_bcm_daemon_free_receiver_array(array_header_t *arr_receiver);
  47. SPBASE_API int sp_bcm_daemon_process_redirect_subscribe(sp_bcm_daemon_t *daemon, int target_id, const sp_uid_t *uid, int new_target_id);
  48. #ifdef __cplusplus
  49. } // extern "C" {
  50. #endif
  51. #endif // SP_BCM_H