static int set_onClickEvent(IntPtr L) { try { TestEventListener obj = (TestEventListener)ToLua.CheckObject(L, 1, typeof(TestEventListener)); EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'TestEventListener.onClickEvent' can only appear on the left hand side of += or -= when used outside of the type 'TestEventListener'")); } if (arg0.op == EventOp.Add) { TestEventListener.OnClick ev = (TestEventListener.OnClick) DelegateTraits <TestEventListener.OnClick> .Create(arg0.func); obj.onClickEvent += ev; } else if (arg0.op == EventOp.Sub) { TestEventListener.OnClick ev = (TestEventListener.OnClick)LuaMisc.GetEventHandler(obj, typeof(TestEventListener), "onClickEvent"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (TestEventListener.OnClick)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { obj.onClickEvent -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
private static int set_onClickEvent(IntPtr L) { int result; try { TestEventListener testEventListener = (TestEventListener)ToLua.CheckObject(L, 1, typeof(TestEventListener)); if (LuaDLL.lua_isuserdata(L, 2) != 0) { EventObject eventObject = (EventObject)ToLua.ToObject(L, 2); if (eventObject.op == EventOp.Add) { TestEventListener.OnClick value = (TestEventListener.OnClick)DelegateFactory.CreateDelegate(typeof(TestEventListener.OnClick), eventObject.func); testEventListener.onClickEvent += value; } else if (eventObject.op == EventOp.Sub) { TestEventListener.OnClick onClick = (TestEventListener.OnClick)LuaMisc.GetEventHandler(testEventListener, typeof(TestEventListener), "onClickEvent"); Delegate[] invocationList = onClick.GetInvocationList(); LuaState luaState = LuaState.Get(L); for (int i = 0; i < invocationList.Length; i++) { onClick = (TestEventListener.OnClick)invocationList[i]; LuaDelegate luaDelegate = onClick.Target as LuaDelegate; if (luaDelegate != null && luaDelegate.func == eventObject.func) { testEventListener.onClickEvent -= onClick; luaState.DelayDispose(luaDelegate.func); break; } } eventObject.func.Dispose(); } result = 0; } else { result = LuaDLL.luaL_throw(L, "The event 'TestEventListener.onClickEvent' can only appear on the left hand side of += or -= when used outside of the type 'TestEventListener'"); } } catch (Exception e) { result = LuaDLL.toluaL_exception(L, e, null); } return(result); }