Пример #1
0
 static public void OnBroadcasting(MessageDefines eventType, MessengerMode mode)
 {
     if (mode == MessengerMode.REQUIRE_LISTENER && !eventTable.ContainsKey(eventType))
     {
         throw new MessengerInternal.BroadcastException(string.Format("Broadcasting message {0} but no listener found.", eventType));
     }
 }
Пример #2
0
 static public void OnListenerRemoved(MessageDefines eventType)
 {
     if (eventTable[eventType] == null)
     {
         eventTable.Remove(eventType);
     }
 }
Пример #3
0
    static public void Broadcast(MessageDefines eventType, MessengerMode mode)
    {
        MessengerInternal.OnBroadcasting(eventType, mode);
        var invocationList = MessengerInternal.GetInvocationList <Action>(eventType);

        foreach (var callback in invocationList)
        {
            callback.Invoke();
        }
    }
Пример #4
0
    static public void Broadcast <TReturn>(MessageDefines eventType, Action <TReturn> returnCall, MessengerMode mode)
    {
        MessengerInternal.OnBroadcasting(eventType, mode);
        var invocationList = MessengerInternal.GetInvocationList <Func <TReturn> >(eventType);

        foreach (var result in invocationList.Select(del => del.Invoke()).Cast <TReturn>())
        {
            returnCall.Invoke(result);
        }
    }
Пример #5
0
    static public void OnListenerAdding(MessageDefines eventType, Delegate listenerBeingAdded)
    {
        if (!eventTable.ContainsKey(eventType))
        {
            eventTable.Add(eventType, null);
        }

        var d = eventTable[eventType];

        if (d != null && d.GetType() != listenerBeingAdded.GetType())
        {
            throw new ListenerException(string.Format("Attempting to add listener with inconsistent signature for event type {0}. Current listeners have type {1} and listener being added has type {2}", eventType, d.GetType().Name, listenerBeingAdded.GetType().Name));
        }
    }
Пример #6
0
    static public T[] GetInvocationList <T>(MessageDefines eventType)
    {
        Delegate d;

        if (eventTable.TryGetValue(eventType, out d))
        {
            try
            {
                return(d.GetInvocationList().Cast <T>().ToArray());
            }
            catch
            {
                throw MessengerInternal.CreateBroadcastSignatureException(eventType);
            }
        }
        return(null);
    }
Пример #7
0
    static public void OnListenerRemoving(MessageDefines eventType, Delegate listenerBeingRemoved)
    {
        if (eventTable.ContainsKey(eventType))
        {
            var d = eventTable[eventType];

            if (d == null)
            {
                throw new ListenerException(string.Format("Attempting to remove listener with for event type {0} but current listener is null.", eventType));
            }
            else if (d.GetType() != listenerBeingRemoved.GetType())
            {
                throw new ListenerException(string.Format("Attempting to remove listener with inconsistent signature for event type {0}. Current listeners have type {1} and listener being removed has type {2}", eventType, d.GetType().Name, listenerBeingRemoved.GetType().Name));
            }
        }
        else
        {
            throw new ListenerException(string.Format("Attempting to remove listener for type {0} but Messenger doesn't know about this event type.", eventType));
        }
    }
Пример #8
0
 static public void RemoveAllListener(MessageDefines eventType)
 {
     eventTable[eventType] = null;
     MessengerInternal.OnListenerRemoved(eventType);
 }
Пример #9
0
 static public void RemoveListener(MessageDefines eventType, Delegate handler)
 {
     MessengerInternal.OnListenerRemoving(eventType, handler);
     eventTable[eventType] = Delegate.Remove(eventTable[eventType], handler);
     MessengerInternal.OnListenerRemoved(eventType);
 }
Пример #10
0
 static public void Broadcast(MessageDefines eventType)
 {
     Broadcast(eventType, MessengerInternal.DEFAULT_MODE);
 }
Пример #11
0
 static public void Broadcast <TReturn>(MessageDefines eventType, Action <TReturn> returnCall)
 {
     Broadcast(eventType, returnCall, MessengerInternal.DEFAULT_MODE);
 }
Пример #12
0
 static public void AddListener(MessageDefines eventType, Delegate callback)
 {
     MessengerInternal.OnListenerAdding(eventType, callback);
     eventTable[eventType] = Delegate.Combine(eventTable[eventType], callback);
 }
Пример #13
0
 static public void RemoveListener <TReturn>(MessageDefines eventType, Func <TReturn> handler)
 {
     MessengerInternal.RemoveListener(eventType, handler);
 }
Пример #14
0
 static public void RemoveListener(MessageDefines eventType, Action handler)
 {
     MessengerInternal.RemoveListener(eventType, handler);
 }
Пример #15
0
 static public void RemoveAllListener(MessageDefines eventType)
 {
     MessengerInternal.RemoveAllListener(eventType);
 }
Пример #16
0
 static public BroadcastException CreateBroadcastSignatureException(MessageDefines eventType)
 {
     return(new BroadcastException(string.Format("Broadcasting message {0} but listeners have a different signature than the broadcaster.", eventType)));
 }