Пример #1
0
    static public T[] GetInvocationList <T>(string eventType)
    {
        Delegate d; //создадим делегат

        if (eventTable.TryGetValue(eventType, out d))
        {//если eventType найден в справочнике событий eventTable, записываем в делегат d само событие, возвращаем его как очередной член массива делегатов
            try
            {
                return(d.GetInvocationList().Cast <T>().ToArray());//повторяем рекурсивно, чтобы собрать всех Listener-ов, подписанных на событие
            }
            catch
            {
                throw MessengerInternalSpecial.CreateBroadcastSignatureException(eventType);
            }
        }
        return(null);
    }
Пример #2
0
    static public void Broadcast(string eventType, MessengerMode mode)
    {
        MessengerInternal.OnBroadcasting(eventType, mode);
        var invocationList = MessengerInternal.GetInvocationList <Action>(eventType); //получим список всех Action-делегатов (без параметров) по событию

        if (invocationList != null)                                                   //фиксы от Арти
        {
            foreach (Action callback in invocationList)
            {
                callback.Invoke();            //запускаем все из полученного списка
            }
        }
        MessengerInternalSpecial.OnBroadcasting(eventType, mode);
        var invocationList2 = MessengerInternalSpecial.GetInvocationList <Action <string> >(eventType);
        if (invocationList2 != null)//фиксы от Арти
        {
            foreach (var callback in invocationList2)
            {
                callback.Invoke(eventType);
            }
        }
    }
Пример #3
0
    static public void Broadcast <TReturn>(string eventType, Action <TReturn> returnCall, MessengerMode mode)
    {
        MessengerInternal.OnBroadcasting(eventType, mode);
        var invocationList = MessengerInternal.GetInvocationList <Func <TReturn> >(eventType);

        if (invocationList != null)//фиксы от Арти
        {
            foreach (var result in invocationList.Select(del => del.Invoke()).Cast <TReturn>())
            {
                returnCall.Invoke(result);
            }
        }

        MessengerInternalSpecial.OnBroadcasting(eventType, mode);
        var invocationList2 = MessengerInternalSpecial.GetInvocationList <Func <string, TReturn> >(eventType);

        if (invocationList2 != null)//фиксы от Арти
        {
            foreach (var result in invocationList2.Select(del => del.Invoke(eventType)).Cast <TReturn>())
            {
                returnCall.Invoke(result);
            }
        }
    }
Пример #4
0
 static public void RemoveListener <TReturn>(string eventType, Func <string, TReturn> handler)
 {
     MessengerInternalSpecial.RemoveListener(eventType, handler);
 }
Пример #5
0
 static public void RemoveListener(string eventType, Action <string> handler)
 {
     MessengerInternalSpecial.RemoveListener(eventType, handler);
 }
Пример #6
0
 static public void RemoveListener(string eventType, Delegate handler)
 {
     MessengerInternalSpecial.OnListenerRemoving(eventType, handler);
     eventTable[eventType] = Delegate.Remove(eventTable[eventType], handler);
     MessengerInternalSpecial.OnListenerRemoved(eventType);
 }
Пример #7
0
    static public readonly MessengerMode DEFAULT_MODE = MessengerMode.DONT_REQUIRE_LISTENER;/*MessengerMode.REQUIRE_LISTENER;*/

    static public void AddListener(string eventType, Delegate callback)
    {
        MessengerInternalSpecial.OnListenerAdding(eventType, callback);
        eventTable[eventType] = Delegate.Combine(eventTable[eventType], callback);
    }