对象系统

回调函数类型定义

对象的创建回调函数

typedef T_Result (*TObjectCreate_Func)(void *obj, TTable *in);

功能:创建对象回调处理函数

参数

参数 说明
obj 对象
in 封装了创建对象的参数

返回值:成功返回T_SUCCESS

对象的销毁回调函数

typedef void (*TObjectDestroy_Func)(void *obj);

功能:销毁对象回调处理函数

参数

参数 说明
obj 对象

返回值:无

事件注册通知回调函数

typedef void (*TObjectAddEventNotify_Func)(void *obj, T_ID event, Tint if_add);

功能:用户增加或删除了某个事件处理函数

参数

参数 说明
obj 对象
event 事件ID
if_add 节点不存在时是否新建一个节点

返回值:无

事件处理回调函数

typedef void (*TObjectEvent_Func)(void *obj, T_ID event, TTable *in, void *arg, TExist *exist);

功能:事件处理回调函数

参数

参数 说明
obj 对象
event 事件ID
in 事件相关参数
arg 同函数TObjectAddEventHandler中的参数arg
exist 与多线程相关,暂无介绍

返回值:无

事件处理回调函数

typedef T_Result (*TObjectMethod_Func)(void *obj, T_ID method, TTable *in_out);

功能:对象方法回调函数

参数

参数 说明
obj 对象
method 对象方法
in_out 既是输入参数也存放输出数据

返回值:T_Result

对象操作接口

自定义对象类型

T_Result TObjectRegisterType(T_ID type, TObjectType *info);

功能:注册一个自定义对象类型

参数

参数 说明
type 自定义对象类型名
info 自定义对象类型的相关信息

返回值:操作结果

创建一个对象

void * TObjectCreate(T_ID type, TTable *in);

功能:创建一个对象

参数

参数 说明
type 要创建的对象的类型
in 封装了创建对象的参数

返回值:返回对象

示例

/*创建一个控件对象*/
TWidget *w = (TWidget *)TObjectCreate(TStringID(type), tab_in);

销毁一个对象

void TObjectDestroy(void *object);

功能:销毁一个对象

参数:

参数 说明
object 要销毁的对象

返回值:

设置对象名称

T_Result TObjectSetName(void *obj, const char *name);

功能:设置对象名称

参数

参数 说明
obj 对象
name 要设置的对象名称

返回值:T_Result 操作结果

获取对象的名字

const char *TObjectGetName(void *obj);

功能:获取对象的名字

参数

参数 说明
obj 对象

返回值:对象的名字,若没有则返回NULL。

通过名字查找对象

void *TObjectGetFromName(const char *name);

功能:通过名字查找对象

参数

参数 说明
name 对象名字

返回值:成功返回该对象,不存在则返回NULL

示例

/*通过名字查找对象*/
TWidget *bnt_1 = TObjectGetFromName("button_1");

增加对象的引用计数

void TObjectHold(void *object);

功能:增加对象的引用计数

参数:

参数 说明
object 对象

返回值:

减少对象的引用计数

void TObjectDrop(void *object);

功能:减少对象的引用计数

参数:

参数 说明
object 对象

返回值:

注册对象的事件

T_Result TObjectAddEventHandler(void *object, T_ID event, TObjectEvent_Func func, void *arg);

功能:注册对象的事件

参数:

参数 说明
object 对象
event 要注册的事件ID
func 事件处理函数
arg 传递到事件处理函数中

返回值: 操作结果

示例:

TObjectAddEventHandler(button_1, CLICKED, Clicked_Func func, NULL);

删除对象的注册事件

T_Result TObjectDeleteEventHandler(void *object, T_ID event, TObjectEvent_Func, void *arg);

功能:删除对象的注册事件

参数:

参数 说明
object 对象
event 要删除的事件ID
func 事件处理函数
arg 传递到事件处理函数中

返回值:T_Result 操作结果

示例:

TObjectDeleteEventHandler(button_1, CLICKED, Delete_Func, NULL);

串行调用指定对象和事件的所有的事件处理函数

T_Result TObjectEvent(void *object, T_ID event, TTable *in);

功能:串行调用指定对象和事件的所有的事件处理函数

参数:

参数 说明
object 对象
event 要调用的事件ID
in 封装这次事件的参数

返回值:操作结果

示例:

TObjectEvent(button_1, CLICKED, NULL);

注解:

该函数可以是对象内部的实现代码在发生事件时调用,触发自身的事件,也可以由用户调用, 模拟触发事件。注意:

同一个对象的相同事件不能重复触发;

不能在触发事件的过程中再次注册相同对象的这个事件。最后可以调用 TObjectDeleteEventHandler()删除注册的事件

获取对象类型

T_ID TObjectGetType(void *object);

功能:获取对象类型

参数:

参数 说明
object 对象

返回值:对象类型

示例:

TObjectGetType(button_1);

检测对象是否存在

Tbool TObjectCheckExist(void *userobj, Tint *ref_count);

功能:检测对象是否存在

参数:

参数 说明
userobj 要检测的对象
ref_count 可以传NULL

返回值:TRUE 对象存在 FALSE 对象不存在。

一个通用的函数调用接口

T_Result TObjectCustomMethod(void * userobj, T_ID method, TTable * in_out);

功能:一个通用的函数调用接口

参数:

参数 说明
userobj 对象
method 对象方法
in_out 既是输入参数也存放输出数据

返回值:操作结果

进程间通信

回调函数类型定义

订阅事件处理函数

typedef void (*TMessageRemoteEvent_Func)(void *msg_obj, T_ID event, TTable *in, void *arg, TExist *exist);

参数:

参数 说明
msg_obj 远程通讯对象
event remote 发布的事件ID
in 封装的事件内容
arg 同TMessageRegisterRemoteEvent 的参数 arg
exist 与多线程相关,暂不开放

返回值:

远程方法回调函数

typedef T_Result (*TMessageRemoteMethod_Func)(void *msg_obj, T_ID method, TTable *in_out, void *arg);

参数:

参数 说明
msg_obj 远程通讯对象
method 远程方法ID
in_out 既是输入参数也存放输出数据
arg 同TMessageCreate 的参数 arg

返回值:T_Result 操作结果

服务端执行完客户端请求的远程方法并有结果返回时会自动调用这个函数

typedef void (*TMessageRemoteMethodReturn_Func)(void *msg_obj, T_ID method, TTable *out, void *arg, T_Result ret, TExist *exist);

参数:

参数 说明
msg_obj 远程通讯对象
method 远程方法ID
out 封装的返回结果
arg 同TMessageCreate的参数 arg
exist 与多线程相关,暂不开放

返回值:

进程间通信接口

创建一个用于进程间通讯的对象

void *TMessageCreate(const char *name, TMessageRemoteMethod_Func func, void *arg);

功能:创建一个用于进程间通讯的对象

参数:

参数 说明
name 通讯对象的名字,不得与其他通讯对象名称重复
func 通信对象的回调函数
arg 传递到回调函数func中

返回值:

示例:

void *msg = TMessageCreate("server", Remote_Func, NULL);

在远程事件回调和远程方法执行时得到对方的名字

const char *TMessageGetRemote(void *msg_obj);

功能:在远程事件回调和远程方法执行时得到对方的名字

参数:

参数 说明
msg_obj 通讯对象

返回值: 通讯对象的名字

示例:

void *msg = TMessageCreate("server", Remote_Func, NULL);
char *name = TMessageGetRemote(msg);

在远程事件回调和远程方法执行时得到对方的进程id

Tint TMessageGetCurRemotePid(void *msg_obj);

功能:在远程事件回调和远程方法执行时得到对方的进程id

参数:

参数 说明
msg_obj 通讯对象

返回值: 通讯对象所属的进程ID

示例:

int pid = TMessageGetCurRemotePid(msg_obj);

检查通讯对象是否存在

Tbool TMessageCheckExist(const char *remote);

功能:检查通讯对象是否存在

参数:

参数 说明
remote 通讯对象的名字

返回值:TRUE 通讯对象存在

FALSE 通讯对象不存在

示例:

Tbool if_exist = TMessageCheckExist("server");

获取通讯对象对应的文件描述符

int TMessageGetFd(void *msg_obj);

功能:获取通讯对象对应的文件描述符

参数:

参数 说明
msg_obj 要操作的通讯对象

返回值: 一个整数型文件描述符

示例:

int fd = TMessageGetFd(msg_obj);

主动调用消息处理函数

void TMessageProcess(void *msg_obj);

功能:主动调用消息处理函数

参数:

参数 说明
msg_obj 传入通讯对象

返回值:

示例:

TMessageProcess(msg_obj);

通讯对象订阅事件

T_Result TMessageRegisterRemoteEvent(void *msg_obj, const char *remote, T_ID event, TMessageRemoteEvent_Func func, void *arg);

功能:通讯对象订阅事件

参数:

参数 说明
msg_obj 自身的通讯对象
remote 远程通讯对象
event 要订阅的事件ID
func 提供的事件处理函数
arg 传递到回调函数func中

返回值:操作结果 如果 remote 不存在,那么这次订阅的动作会被缓冲,在 remote 创建后会自动订阅

发布事件(一对多)

void TMessageTriggerRemoteEvent(void *msg_obj, T_ID event, TTable *in);

功能:发布事件(一对多)

参数:

参数 说明
msg_obj 自身的通讯对象
event 要发布的事件ID
in 封装事件的内容

返回值:

示例:

// server.c
void *msg = TMessageCreate("server", NULL, NULL);
TMessageTriggerRemoteEvent(msg, T_STRING_ID(EVENT_LADDR), NULL);
// client.c
void *msg = TMessageCreate("client", NULL, NULL);
TMessageRegisterRemoteEvent(msg, "server", T_STRING_ID(EVENT_LADDR), func, NULL);

删除订阅事件

void TMessageDeleteRemoteEvent(void *msg_obj, const char *remote, T_ID event);

功能:删除订阅事件

参数:

参数 说明
msg_obj 自身的通讯对象
remote 远程通讯对象

返回值:

示例:

TMessageDeleteRemoteEvent(msg_obj, "server", T_STRING_ID(EVENT_LADDR));

指定通讯对象发布事件(一对一)

void TMessageTriggerRemoteClientEvent(void *msg_obj, const char *remote, T_ID event, TTable *in);

功能:指定通讯对象发布事件(一对一)

参数:

参数 说明
msg_obj 自身的通讯对象
remote 接收事件的通讯对象名
event 要发布的事件ID
in 封装事件的内容

返回值:

示例:

// client.c
void *msg = TMessageCreate("client", NULL, NULL);
TMessageTriggerRemoteClientEvent(msg_obj, "client", T_STRING_ID(EVENT_LADDR), in);

请求远程方法调用

T_Result TMessageRemoteMethod(void *msg_obj, const char *remote, T_ID method, TTable *in,TMessageRemoteMethodReturn_Func func, void *arg);

功能:请求远程方法调用

参数:

参数 说明
msg_obj 自身的通讯对象
remote 远程通讯对象的名字
method 封装输入参数
in 封装事件的内容
func 提供的结果处理函数
arg 传递到回调函数func中

返回值:T_Result 操作结果

示例:

// server.c
void func(void *msg_obj, T_ID method, TTable *in_out, void *arg)
{
    if(method == T_STRING_ID(MSG_Remote_Test))
    {

    }
}

void *msg = TMessageCreate("server",func , NULL);
// client.c
void *msg = TMessageCreate("client", NULL, NULL);
TMessageRemoteMethod(msg,"server",T_STRING_ID(MSG_Remote_Test),send,NULL,NULL);

注解:

如果func 不等于NULL(即有返回值处理函数),那么这次远程方法调用会被缓冲,即使这时 远程的通讯对象不存在或意外退出,在它下次启动时,会自动再次触发这次远程方法调用。如果func 等于NULL,就不被缓冲.有时用户不需要处理返回值,但是又想被缓冲,简单的方法就是提供一个通用的处理函数TRemoteMethodReturn_General_Handler

请求远程方法调用并等待远程方法返回

Tbool TMessageWaitRemoteReturn(void *msg_obj, const char *remote, T_ID method, TTimeout timeout, Tbool ignore);

功能:请求远程方法调用并等待远程方法返回

参数:

参数 说明
msg_obj 自身的通讯对象
remote 远程通讯对象的名字
method 远程方法ID
timeout 超时等待时间
ignore 表示阻塞时间超时是否忽略这次调用:TRUE 忽略;FALSE 不忽略

返回值:在阻塞的过程中是否收到返回值

TRUE 在timeout毫秒时间内收到返回值

FALSE 在timeout毫秒时间内未收到返回值

示例:

// client.c
void *msg = TMessageCreate("client", NULL, NULL);
TMessageRemoteMethod(msg,"server",T_STRING_ID(MSG_Remote_Test),send,NULL,NULL);

注解:

timeout为0 表示只检测远程方法是否返回 返回TRUE 表示远程结果已经返回,并且回调函数也已经执行完 返回FALSE 就一定表示结果还没有返回,这时"ignore"才起作用

调用远程方法并等待执行结果

Tbool TMessageRemoteMethodWaitReturn(void *msg_obj, const char *remote, T_ID method,TTable *in_out, T_Result *result, TTimeout timeout_ms);

功能:调用远程方法并等待执行结果

参数:

参数 说明
msg_obj 自身的通讯对象
remote 远程通讯对象的名字
method 远程方法ID
in_out 既是输入参数也存放输出数据
result 远程方法执行的结果
timeout_ms 表示最长阻塞的时间

返回值: 函数执行的结果

TRUE 表示收到了远程方法的执行结果

FALSE 表示该操作没有发送出去,或者超时没有收到结果;

示例:

TMessageRemoteMethodWaitReturn(msg_obj, "server", T_STRING_ID(MSG_GET_INIT_STATUS),in_out, &result, 1000);

注解:

只有当函数返回TRUE,并且result为T_SUCCESS时才算成功, 此时in_out 存放返回数据

results matching ""

    No results matching ""