Example #1
0
        public void dispatchChange(T change, ChangeType type)
        {
            change.type = type;

            int lastDispatchCount = change.dispatchCount;

            change.dispatchCount += 1;

            if (callbacksByChangeType.ContainsKey(type))
            {
                List <Action <T> > list = callbacksByChangeType[type];
                int i;
                for (i = 0; i < list.Count; i += 1)
                {
                    list[i](change);
                    if (change.isPropagandationStopped)
                    {
                        break;
                    }
                }
            }

            if (lastDispatchCount == 0) //защита на случай если в процессе дёргания слушателей это же событие отдиспатчат ещё раз.
            {
                pool.release(change);
            }
        }