hook
简介
外部函数调用
- 通过注册钩子函数的方式来实现外部方法的传参调用
- 该方法来源于之前老版本common-lib中的HookD
使用场景
- hook是一个parallel的全局钩子函数,支持在任意场景进行注册和调用
- common_event则是绑定在一个object上进行监听和触发
- common_event支持同步获取方法结果,而hook不支持
- hook和common_event两者都支持同一个调用触发多个函数执行
使用方法
- import pkg.hook;
- 调用 hook.register(string hook_name, string hooker, function func, bool add_last = true); 注册需要外部调用的钩子函数
- 调用 hook.async_blocking_invoke(string hook_name ...); 异步阻塞调用指定钩子函数
- 调用 hook.invoke(string hook_name ...); 无条件调用指定钩子函数
- 调用 hook.invoke_break(string hook_name ...); 调用指定钩子函数,如遇到异常则中断处理
例子:
#pragma parallel
import gs.lang.*;
import gs.util.*;
import pkg.gtest;
import pkg.hook;
void create()
{
hook.register("hooktest", "tester", (: hook_test :));
}
public mixed hook_test(int p1, string p2)
{
printf("This is hook test param1:%d, param2:%s", p1, p2);
return [p1, p2];
}
public mixed hook_invoke(int p1, string p2)
{
return hook.invoke_break("hooktest", p1, p2);
}
public void test_run()
{
gtest.test_func((: hook_invoke, 1, "test" :), [1, "test"]);
}
组件接口
函数原型 | 函数作用 |
---|---|
void register(string hook_name, string hooker, function func, bool add_last = true) | 该接口用来注册外部调用函数 |
void async_blocking_invoke(string hook_name ...) | 该接口用来异步阻塞调用指定钩子函数 |
void invoke(string hook_name ...) | 该接口用来无条件调用指定钩子函数 |
mixed invoke_break(string hook_name ...) | 该接口用来调用指定钩子函数,如遇到异常则中断处理 |