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)); }
public static void Remove(this CoroutineLockQueueType self, long key) { if (self.dictionary.TryGetValue(key, out CoroutineLockQueue value)) { value.Dispose(); } self.dictionary.Remove(key); }
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; } }
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); } }
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); } }
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); }
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); }
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); }
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)); }
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)); }
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)); }
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); }; }
public static void Add(this CoroutineLockQueueType self, long key, CoroutineLockQueue value) { self.dictionary.Add(key, value); }
public static bool TryGetValue(this CoroutineLockQueueType self, long key, out CoroutineLockQueue value) { return(self.dictionary.TryGetValue(key, out value)); }