Пример #1
0
    public static IEnumerable Dispatch()
    {
        int num = Dispatcher.instance.currentQueue;

        Dispatcher.instance.currentQueue = ((num == 0) ? 1 : 0);
        string[] array = Dispatcher.instance.newMessages.ToArray();
        Dispatcher.instance.newMessages.Clear();
        for (int i = 0; i < array.Length; i++)
        {
            Dispatcher.Domain domain = (Dispatcher.Domain)Dispatcher.instance.domains[array[i]];
            Dispatcher.instance.publishers = domain.publishers[num];
            if (Dispatcher.instance.publishers.Count != 0)
            {
                Dispatcher.instance.subscribers = domain.subscribers;
                if (Dispatcher.IsFiltered(domain.name))
                {
                    Dispatcher.instance.publishers.Clear();
                }
                while (Dispatcher.instance.publishers.Count > 0)
                {
                    Publisher publisher = Dispatcher.instance.publishers.Dequeue();
                    yield return(publisher);

                    if (!Dispatcher.instance.skipPublisher)
                    {
                        ProcessPublisher(publisher);
                    }

                    Dispatcher.instance.skipPublisher = false;
                }
            }
        }
        yield break;
    }
Пример #2
0
 public static void UnSubscribeAll()
 {
     string[] array = new string[Dispatcher.instance.domains.Count];
     Dispatcher.instance.domains.Keys.CopyTo(array, 0);
     for (int i = 0; i < array.Length; i++)
     {
         Dispatcher.Domain domain = (Dispatcher.Domain)Dispatcher.instance.domains[array[i]];
         domain.subscribers.Clear();
     }
     Dispatcher.instance.domainNames.Clear();
 }
Пример #3
0
 public static void Subscribe(Subscription subscription)
 {
     if (Dispatcher.instance.domains.Contains(subscription.domain))
     {
         Dispatcher.Domain domain = (Dispatcher.Domain)Dispatcher.instance.domains[subscription.domain];
         domain.AddSubscription(subscription);
         return;
     }
     Dispatcher.Domain domain2 = new Dispatcher.Domain(subscription.domain);
     Dispatcher.instance.domains.Add(subscription.domain, domain2);
     domain2.AddSubscription(subscription);
     Dispatcher.instance.domainNames.Add(subscription.domain);
 }
Пример #4
0
    // This is used when we are dispatching messages from external storage
    public static void Dispatch(Publisher publisher)
    {
        if (Dispatcher.instance.domains.Contains(publisher.domain))
        {
            Dispatcher.Domain domain = (Dispatcher.Domain)Dispatcher.instance.domains[publisher.domain];
            if (domain.subscribers.Contains(publisher.message))
            {
                object obj = domain.subscribers[publisher.message];
                List <Subscription> list = obj as List <Subscription>;

                InvokeMessage(publisher, list);
            }
        }
    }
Пример #5
0
 public static void AutoUnSubscribe()
 {
     string[] array = new string[Dispatcher.instance.domains.Count];
     Dispatcher.instance.domains.Keys.CopyTo(array, 0);
     for (int i = 0; i < array.Length; i++)
     {
         Dispatcher.Domain domain = (Dispatcher.Domain)Dispatcher.instance.domains[array[i]];
         string[]          array2 = new string[domain.subscribers.Count];
         domain.subscribers.Keys.CopyTo(array2, 0);
         for (int j = 0; j < array2.Length; j++)
         {
             List <Subscription> list = (List <Subscription>)domain.subscribers[array2[j]];
             for (int k = 0; k < list.Count; k++)
             {
                 Subscription subscription = list[k];
                 if (subscription.autoUnSubscribe)
                 {
                     domain.RemoveSubscription(subscription);
                 }
             }
         }
     }
 }
Пример #6
0
 public static void UnSubscribe(Subscription subscription)
 {
     if (subscription == null)
     {
         return;
     }
     if (Dispatcher.instance.domains == null || Dispatcher.instance.domains.Count == 0)
     {
         return;
     }
     if (Dispatcher.instance.domains.Contains(subscription.domain))
     {
         Dispatcher.Domain domain = (Dispatcher.Domain)Dispatcher.instance.domains[subscription.domain];
         if (domain == null || domain.subscribers == null || domain.subscribers.Count == 0)
         {
             return;
         }
         domain.RemoveSubscription(subscription);
         if (!Dispatcher.instance.domains.Contains(subscription.domain))
         {
             Dispatcher.instance.domainNames.Remove(subscription.domain);
         }
     }
 }