Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

可以直接通过MethodInfo注册事件 #17

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions Event.cs
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,17 @@ public static bool registerOut(string eventname, object obj, string funcname)
return register(events_out, eventname, obj, funcname);
}

/*
注册监听由kbe插件抛出的事件。(out = kbe->render)
通常由渲染表现层来注册, 例如:监听角色血量属性的变化, 如果UI层注册这个事件,
事件触发后就可以根据事件所附带的当前血量值来改变角色头顶的血条值。
直接通过Method注册,obj和methodName作为这个事件的唯一标识,如果这个方法为匿名方法,则obj为null
*/
public static bool registerOut(string eventName,object obj,string methodName,System.Reflection.MethodInfo method)
{
return register(events_out, eventName, obj, methodName, method);
}

/*
注册监听由渲染表现层抛出的事件(in = render->kbe)
通常由kbe插件层来注册, 例如:UI层点击登录, 此时需要触发一个事件给kbe插件层进行与服务端交互的处理。
Expand All @@ -135,16 +146,26 @@ public static bool registerIn(string eventname, object obj, string funcname)
{
return register(events_in, eventname, obj, funcname);
}

private static bool register(Dictionary<string, List<Pair>> events, string eventname, object obj, string funcname)

/*
注册监听由渲染表现层抛出的事件(in = render->kbe)
通常由kbe插件层来注册, 例如:UI层点击登录, 此时需要触发一个事件给kbe插件层进行与服务端交互的处理。
直接通过Method注册,obj和methodName作为这个事件的唯一标识,如果这个方法为匿名方法,则obj为null
*/
public static bool registerIn(string eventname, object obj, string methodName,System.Reflection.MethodInfo method)
{
return register(events_in, eventname, obj, methodName,method);
}

private static bool register(Dictionary<string, List<Pair>> events, string eventname, object obj, string funcname, System.Reflection.MethodInfo method = null)
{
deregister(events, eventname, obj, funcname);
List<Pair> lst = null;

Pair pair = new Pair();
pair.obj = obj;
pair.funcname = funcname;
pair.method = obj.GetType().GetMethod(funcname);
pair.method = method==null?obj.GetType().GetMethod(funcname):method;
if(pair.method == null)
{
Dbg.ERROR_MSG("Event::register: " + obj + "not found method[" + funcname + "]");
Expand Down