Exemplo n.º 1
0
        public static void Notify(K key, V arg, string groupId = "")
        {
            var group = BroadcastTunnel <K, V> .GetGroup(groupId);

            if (null == group)
            {
                return;
            }

            Manager mgr;

            if (group.TryGetValue(key, out mgr))
            {
                BroadcastTunnel <K, V> .DoNotify(mgr, arg);
            }
        }
Exemplo n.º 2
0
        static void DoNotify(Manager mgr, V arg)
        {
            var queue = mgr.queue;

            if (0 < queue.Count)
            {
                mgr.nextCall.AddLast(arg);
                return;
            }

            var enumerator = mgr.container.GetEnumerator();

            while (enumerator.MoveNext())
            {
                queue.AddLast(enumerator.Current);
            }

            var node     = queue.First;
            var nodeTemp = node;

            while (null != node)
            {
                var action = node.Value;
                nodeTemp = node;
                node     = node.Next;
                queue.Remove(nodeTemp);

                if (null != action)
                {
                    action(arg);
                }
            }

            if (0 < mgr.nextCall.Count)
            {
                var nextCallNode = mgr.nextCall.First;
                var nextCallArg  = nextCallNode.Value;
                mgr.nextCall.Remove(nextCallNode);
                BroadcastTunnel <K, V> .DoNotify(mgr, nextCallArg);
            }
        }