2023-09-24 01:26:07 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "u_types.h"
|
|
|
|
|
#include "u_prot.h"
|
2023-11-26 16:09:19 +08:00
|
|
|
#include "u_thread.h"
|
2023-11-27 23:09:34 +08:00
|
|
|
#include <pthread.h>
|
2023-11-18 22:58:10 +08:00
|
|
|
|
|
|
|
|
struct rpc_svr_obj;
|
|
|
|
|
typedef msg_tag_t (*rpc_dispatch_func)(struct rpc_svr_obj *obj, msg_tag_t tag, ipc_msg_t *msg);
|
2023-09-24 01:26:07 +08:00
|
|
|
|
|
|
|
|
typedef struct rpc_svr_obj
|
|
|
|
|
{
|
|
|
|
|
mword_t prot; //!< 支持的协议
|
|
|
|
|
rpc_dispatch_func dispatch; //!< 分发函数
|
|
|
|
|
} rpc_svr_obj_t;
|
|
|
|
|
|
|
|
|
|
static inline int rpc_svr_obj_init(rpc_svr_obj_t *obj, rpc_dispatch_func dis, mword_t prot)
|
|
|
|
|
{
|
|
|
|
|
obj->dispatch = dis;
|
|
|
|
|
obj->prot = prot;
|
2025-03-23 17:35:56 +08:00
|
|
|
return 0;
|
2023-09-24 01:26:07 +08:00
|
|
|
}
|
|
|
|
|
|
2023-11-27 23:09:34 +08:00
|
|
|
#define META_PROT_NR 4
|
|
|
|
|
typedef struct meta
|
|
|
|
|
{
|
|
|
|
|
rpc_svr_obj_t svr;
|
|
|
|
|
rpc_svr_obj_t *svr_list[META_PROT_NR];
|
|
|
|
|
umword_t svr_list_prot[META_PROT_NR];
|
|
|
|
|
pthread_spinlock_t lock;
|
2025-03-02 23:31:22 +08:00
|
|
|
|
|
|
|
|
obj_handler_t hd_meta;
|
|
|
|
|
bool_t is_init;
|
2023-11-27 23:09:34 +08:00
|
|
|
} meta_t;
|
|
|
|
|
|
2025-03-09 00:21:55 +08:00
|
|
|
int rpc_meta_init_def(obj_handler_t tk, obj_handler_t *ret_ipc_hd);
|
|
|
|
|
int rpc_meta_init(meta_t *meta_obj, obj_handler_t tk_hd, obj_handler_t *ret_ipc_hd);
|
|
|
|
|
void meta_obj_init_def(void);
|
|
|
|
|
void meta_obj_init(meta_t *meta);
|
2023-11-27 23:09:34 +08:00
|
|
|
void meta_unreg_svr_obj_raw(meta_t *meta, umword_t prot);
|
|
|
|
|
void meta_unreg_svr_obj(umword_t prot);
|
2025-02-05 14:44:49 +08:00
|
|
|
rpc_svr_obj_t *meta_find_svr_obj(umword_t prot);
|
2023-11-27 23:09:34 +08:00
|
|
|
int meta_reg_svr_obj(rpc_svr_obj_t *svr_obj, umword_t prot);
|
|
|
|
|
int meta_reg_svr_obj_raw(meta_t *meta, rpc_svr_obj_t *svr_obj, umword_t prot);
|
2025-03-02 23:31:22 +08:00
|
|
|
int rpc_creaite_bind_ipc(obj_handler_t tk, void *obj, obj_handler_t *ipc_hd);
|