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; }
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(); }
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); }
// 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); } } }
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); } } } } }
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); } } }