Example #1
0
        public static void Notify(this CoroutineLockComponent self, CoroutineLockType coroutineLockType, long key, int count)
        {
            CoroutineLockQueueType coroutineLockQueueType = self.list[(int)coroutineLockType];

            if (!coroutineLockQueueType.TryGetValue(key, out CoroutineLockQueue queue))
            {
                return;
            }

            if (queue.Count == 0)
            {
                coroutineLockQueueType.Remove(key);
                return;
            }

#if NOT_UNITY
            const int frameCoroutineCount = 5;
#else
            const int frameCoroutineCount = 10;
#endif

            if (count > frameCoroutineCount)
            {
                self.NextFrameRun(coroutineLockType, key);
                return;
            }

            CoroutineLockInfo coroutineLockInfo = queue.Dequeue();
            coroutineLockInfo.Tcs.SetResult(self.CreateCoroutineLock(coroutineLockType, key, coroutineLockInfo.Time, count));
        }
Example #2
0
 public static void Remove(this CoroutineLockQueueType self, long key)
 {
     if (self.dictionary.TryGetValue(key, out CoroutineLockQueue value))
     {
         value.Dispose();
     }
     self.dictionary.Remove(key);
 }
Example #3
0
 public void Awake()
 {
     Instance = this;
     for (int i = 0; i < this.list.Capacity; ++i)
     {
         CoroutineLockQueueType coroutineLockQueueType = EntityFactory.Create <CoroutineLockQueueType>(this.Domain);
         this.list.Add(coroutineLockQueueType);
         coroutineLockQueueType.Parent = this;
     }
 }
Example #4
0
        public override void Awake(CoroutineLockComponent self)
        {
            CoroutineLockComponent.Instance = self;

            self.list = new List <CoroutineLockQueueType>(CoroutineLockType.Max);
            for (int i = 0; i < CoroutineLockType.Max; ++i)
            {
                CoroutineLockQueueType coroutineLockQueueType = self.AddChildWithId <CoroutineLockQueueType>(++self.idGenerator);
                self.list.Add(coroutineLockQueueType);
            }
        }
Example #5
0
            protected override void Awake(CoroutineLockComponent self)
            {
                CoroutineLockComponent.Instance = self;

                self.list.Clear();

                for (int i = 0; i < CoroutineLockType.Max; ++i)
                {
                    CoroutineLockQueueType coroutineLockQueueType = self.AddChildWithId <CoroutineLockQueueType>(i);
                    self.list.Add(coroutineLockQueueType);
                }
            }
Example #6
0
        public static async ETTask <CoroutineLock> Wait(this CoroutineLockComponent self, int coroutineLockType, long key, int time = 60000)
        {
            CoroutineLockQueueType coroutineLockQueueType = self.list[coroutineLockType];

            if (!coroutineLockQueueType.TryGetValue(key, out CoroutineLockQueue queue))
            {
                coroutineLockQueueType.Add(key, self.AddChildWithId <CoroutineLockQueue>(++self.idGenerator, true));
                return(self.CreateCoroutineLock(coroutineLockType, key, time, 1));
            }
            ETTask <CoroutineLock> tcs = ETTask <CoroutineLock> .Create(true);

            queue.Add(tcs, time);
            return(await tcs);
        }
Example #7
0
        public static async ETTask <CoroutineLock> Wait(this CoroutineLockComponent self, int coroutineLockType, long key, int time = 60000)
        {
            CoroutineLockQueueType coroutineLockQueueType = self.list[coroutineLockType];

            CoroutineLockQueue queue = coroutineLockQueueType.GetChild <CoroutineLockQueue>(key);

            if (queue == null)
            {
                CoroutineLockQueue coroutineLockQueue = coroutineLockQueueType.AddChildWithId <CoroutineLockQueue>(key, true);
                return(self.CreateCoroutineLock(coroutineLockQueue, coroutineLockType, key, time, 1));
            }
            ETTask <CoroutineLock> tcs = ETTask <CoroutineLock> .Create(true);

            queue.Add(tcs, time);
            return(await tcs);
        }
Example #8
0
        public async ETTask <CoroutineLock> Wait(CoroutineLockType coroutineLockType, long key)
        {
            CoroutineLockQueueType coroutineLockQueueType = this.list[(int)coroutineLockType];

            if (!coroutineLockQueueType.TryGetValue(key, out CoroutineLockQueue queue))
            {
                queue = EntityFactory.Create <CoroutineLockQueue>(this.Domain);
                coroutineLockQueueType.Add(key, queue);

                return(EntityFactory.CreateWithParent <CoroutineLock, CoroutineLockType, long>(this, coroutineLockType, key));
            }

            ETTaskCompletionSource <CoroutineLock> tcs = new ETTaskCompletionSource <CoroutineLock>();

            queue.Enqueue(tcs);
            return(await tcs.Task);
        }
Example #9
0
        public static void Notify(this CoroutineLockComponent self, int coroutineLockType, long key, int level)
        {
            CoroutineLockQueueType coroutineLockQueueType = self.list[coroutineLockType];

            if (!coroutineLockQueueType.TryGetValue(key, out CoroutineLockQueue queue))
            {
                return;
            }

            if (queue.Count == 0)
            {
                coroutineLockQueueType.Remove(key);
                return;
            }

            CoroutineLockInfo coroutineLockInfo = queue.Dequeue();

            coroutineLockInfo.Tcs.SetResult(self.CreateCoroutineLock(coroutineLockType, key, coroutineLockInfo.Time, level));
        }
Example #10
0
        public void Notify(CoroutineLockType coroutineLockType, long key)
        {
            CoroutineLockQueueType coroutineLockQueueType = this.list[(int)coroutineLockType];

            if (!coroutineLockQueueType.TryGetValue(key, out CoroutineLockQueue queue))
            {
                throw new Exception($"first work notify not find queue");
            }
            if (queue.Count == 0)
            {
                coroutineLockQueueType.Remove(key);
                queue.Dispose();
                return;
            }

            ETTaskCompletionSource <CoroutineLock> tcs = queue.Dequeue();

            tcs.SetResult(EntityFactory.CreateWithParent <CoroutineLock, CoroutineLockType, long>(this, coroutineLockType, key));
        }
Example #11
0
        private static void Notify(this CoroutineLockComponent self, int coroutineLockType, long key, int level)
        {
            CoroutineLockQueueType coroutineLockQueueType = self.list[coroutineLockType];

            CoroutineLockQueue queue = coroutineLockQueueType.GetChild <CoroutineLockQueue>(key);

            if (queue == null)
            {
                return;
            }

            if (queue.Count == 0)
            {
                coroutineLockQueueType.RemoveChild(key);
                return;
            }

            CoroutineLockInfo coroutineLockInfo = queue.Dequeue();

            coroutineLockInfo.Tcs.SetResult(self.CreateCoroutineLock(queue, coroutineLockType, key, coroutineLockInfo.Time, level));
        }
Example #12
0
        public override void Awake(CoroutineLockComponent self)
        {
            CoroutineLockComponent.Instance = self;

            self.list = new List <CoroutineLockQueueType>(CoroutineLockType.Max);
            for (int i = 0; i < CoroutineLockType.Max; ++i)
            {
                CoroutineLockQueueType coroutineLockQueueType = self.AddChildWithId <CoroutineLockQueueType>(++self.idGenerator);
                self.list.Add(coroutineLockQueueType);
            }

            self.foreachFunc = (k, v) =>
            {
                if (k > self.timeNow)
                {
                    self.minTime = k;
                    return(false);
                }

                self.timeOutIds.Enqueue(k);
                return(true);
            };
        }
Example #13
0
 public static void Add(this CoroutineLockQueueType self, long key, CoroutineLockQueue value)
 {
     self.dictionary.Add(key, value);
 }
Example #14
0
 public static bool TryGetValue(this CoroutineLockQueueType self, long key, out CoroutineLockQueue value)
 {
     return(self.dictionary.TryGetValue(key, out value));
 }