Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 /// <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);
 }
Exemplo n.º 3
0
 /// <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);
 }
Exemplo n.º 4
0
 /// <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);
 }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        /// <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);
                    }
                }
            }
        }
Exemplo n.º 7
0
        /// <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);
                }
            }
        }
Exemplo n.º 8
0
 public void Unregister(MsgTypedHandler <T> inAction)
 {
     m_Action -= inAction;
 }
Exemplo n.º 9
0
 public void Register(MsgTypedHandler <T> inAction)
 {
     m_Action += inAction;
 }
Exemplo n.º 10
0
 public void Dispose()
 {
     m_Action = null;
 }
Exemplo n.º 11
0
 public TypedHandlerEntry(MsgType <T> inType, MsgTypedHandler <T> inHandler)
 {
     Type    = inType;
     Handler = inHandler;
 }