OpenSim.Region.ScriptEngine.../src/LUA/Method/RegisterEventHandler.cs

53 lines
1.5 KiB
C#

using System;
using System.Reflection;
namespace NLua.Method
{
class RegisterEventHandler
{
private readonly EventHandlerContainer _pendingEvents;
private readonly EventInfo _eventInfo;
private readonly object _target;
public RegisterEventHandler(EventHandlerContainer pendingEvents, object target, EventInfo eventInfo)
{
_target = target;
_eventInfo = eventInfo;
_pendingEvents = pendingEvents;
}
/*
* Adds a new event handler
*/
public Delegate Add(LuaFunction function)
{
Delegate handlerDelegate = CodeGeneration.Instance.GetDelegate(_eventInfo.EventHandlerType, function);
return Add(handlerDelegate);
}
public Delegate Add(Delegate handlerDelegate)
{
_eventInfo.AddEventHandler(_target, handlerDelegate);
_pendingEvents.Add(handlerDelegate, this);
return handlerDelegate;
}
/*
* Removes an existing event handler
*/
public void Remove(Delegate handlerDelegate)
{
RemovePending(handlerDelegate);
_pendingEvents.Remove(handlerDelegate);
}
/*
* Removes an existing event handler (without updating the pending handlers list)
*/
internal void RemovePending(Delegate handlerDelegate)
{
_eventInfo.RemoveEventHandler(_target, handlerDelegate);
}
}
}