public void Register <T>(MsgTypedHandler <T> inAction) { if (m_DebugMode) { if (m_AllowedArgType == null) { throw new ArgumentException("Message type '" + m_Metadata.Name + "' does not accept arguments, but handler for type '" + typeof(T).Name + "' provided!"); } else if (typeof(T).TypeHandle.Value != m_AllowedArgTypePtr) { throw new ArgumentException("Message type '" + m_Metadata.Name + "' accepts arguments of type '" + m_AllowedArgType.Name + "', but handler for type '" + typeof(T).Name + "' provided!"); } if (m_Metadata.CanLog(LogFlags.Register)) { m_Manager.Log(m_Owner.Owner.name + " registered listener for " + m_Metadata.Name); } } TypedMsgDelegate <T> msgDelegate; if (m_Typed == null) { m_Typed = msgDelegate = new TypedMsgDelegate <T>(); } else { msgDelegate = (TypedMsgDelegate <T>)m_Typed; } msgDelegate.Register(inAction); }
/// <summary> /// Registers a temporary handler for the given message type. /// </summary> public Binding RegisterTemp <T>(MsgType <T> inType, MsgTypedHandler <T> inHandler) { if (m_Impl.IsValid) { return(new Binding(this, inType, (m) => inHandler((T)m.Arg))); } return(null); }
/// <summary> /// Deregisters a handler for the given message type. /// </summary> public Messenger Deregister <T>(MsgType <T> inType, MsgTypedHandler <T> inHandler) { if (m_Impl.IsValid) { m_Impl.Deregister(inType, inHandler); } return(this); }
/// <summary> /// Registers a handler for the given message type. /// </summary> public MsgTable Batch <T>(MsgType <T> inType, MsgTypedHandler <T> inHandler) { if (m_Entries == null) { m_Entries = new List <IEntry>(); } m_Entries.Add(new TypedHandlerEntry <T>(inType, inHandler)); return(this); }
public void Deregister <T>(MsgTypedHandler <T> inAction) { if (m_DebugMode && m_Metadata.CanLog(LogFlags.Deregister)) { m_Manager.Log(m_Owner.Owner.name + " deregistered listener for " + m_Metadata.Name); } if (m_Typed != null) { TypedMsgDelegate <T> msgDelegate = (TypedMsgDelegate <T>)m_Typed; msgDelegate.Unregister(inAction); } }
/// <summary> /// Deregisters a handler for the given MsgType. /// </summary> public void Deregister <T>(MsgType inType, MsgTypedHandler <T> inHandler) { ValidateRegisterArgs(inType, inHandler); DelegateBlock handler; if (m_Handlers.TryGetValue(inType, out handler)) { handler.Deregister(inHandler); if (handler.IsEmpty()) { handler.Dispose(); m_Handlers.Remove(inType); if (m_Parent != null) { m_Parent.Deregister(inType, this); } } } }
/// <summary> /// Registers a handler for the given MsgType. /// </summary> public void Register <T>(MsgType inType, MsgTypedHandler <T> inHandler) { ValidateRegisterArgs(inType, inHandler); DelegateBlock handler; if (m_Handlers.TryGetValue(inType, out handler)) { handler.Register(inHandler); } else { handler = m_Handlers[inType] = new DelegateBlock(this, m_Manager, inType); handler.Register(inHandler); if (m_Parent != null) { m_Parent.Register(inType, this); } } }
public void Unregister(MsgTypedHandler <T> inAction) { m_Action -= inAction; }
public void Register(MsgTypedHandler <T> inAction) { m_Action += inAction; }
public void Dispose() { m_Action = null; }
public TypedHandlerEntry(MsgType <T> inType, MsgTypedHandler <T> inHandler) { Type = inType; Handler = inHandler; }