Пример #1
0
 internal void RequestCycle(IWiredCycleable handler)
 {
     lock (requestingUpdates.SyncRoot)
     {
         requestingUpdates.Enqueue(handler);
     }
 }
Пример #2
0
        //public int Delay;

        public WiredCycle(IWiredCycleable pIWiredCycleable, RoomUser pUser, Item pItem, int pDelay)
        {
            this.IWiredCycleable = pIWiredCycleable;
            this.User            = pUser;
            this.Item            = pItem;
            this.Cycle           = 0;
            //this.Delay = pDelay;
        }
Пример #3
0
        internal void OnCycle()
        {
            if (doCleanup)
            {
                foreach (List <RoomItem> list in actionStacks.Values)
                {
                    foreach (RoomItem item in list)
                    {
                        if (item.wiredCondition != null)
                        {
                            item.wiredCondition.Dispose();
                            item.wiredCondition = null;
                        }
                        if (item.wiredHandler != null)
                        {
                            item.wiredHandler.Dispose();
                            item.wiredHandler = null;
                        }
                    }
                }
                actionStacks.Clear();
                actionItems.Clear();
                requestedTriggers.Clear();
                requestingUpdates.Clear();

                doCleanup = false;
                return;
            }
            if (requestingUpdates.Count > 0)
            {
                List <IWiredCycleable> toAdd = new List <IWiredCycleable>();
                lock (requestingUpdates.SyncRoot)
                {
                    while (requestingUpdates.Count > 0)
                    {
                        IWiredCycleable handler = (IWiredCycleable)requestingUpdates.Dequeue();
                        if (handler.Disposed())
                        {
                            continue;
                        }

                        if (handler.OnCycle())
                        {
                            toAdd.Add(handler);
                        }
                    }

                    foreach (IWiredCycleable cycle in toAdd)
                    {
                        requestingUpdates.Enqueue(cycle);
                    }
                }
            }

            conditionHandler.OnCycle();
        }
Пример #4
0
 internal void RequestCycle(IWiredCycleable handler)
 {
     lock (requestingUpdates.SyncRoot)
     {
         requestingUpdates.Enqueue(handler);
     }
 }