protected override void OnDisabled() { base.OnDisabled(); LockStore.ClearAllLocks(); LockAcquireEvents.Clear(); LockReleaseEvents.Clear(); }
public async Task ShouldNotWaitForDifferentKey() { //Arrange var store = new LockStore(); var tasks = new List <Task>(); var log = new List <int>(); var tasksCount = 16; var childTasks = Enumerable.Range(0, tasksCount).Select(_ => new TaskCompletionSource <bool>()).ToList(); //Act for (var i = 0; i < tasksCount; i++) { var id = i; tasks.Add(Task.Run(async() => { using (await store.GetTokenAsync("test" + id)) { lock (log) { log.Add(id); }; childTasks[id].SetResult(true); await Task.WhenAll(childTasks.Select(x => x.Task)); lock (log) { log.Add(id); }; } })); } await Task.WhenAll(tasks); //Assert log.Take(tasksCount).Distinct().Count().ShouldBe(tasksCount); log.Skip(tasksCount).Distinct().Count().ShouldBe(tasksCount); }
public async Task ShouldWaitForSameKey() { //Arrange var store = new LockStore(); var tasks = new List <Task>(); var log = new List <int>(); var tasksCount = 16; var childTasksReached = Enumerable.Range(0, tasksCount).Select(_ => new TaskCompletionSource <bool>()).ToList(); //Act for (var i = 0; i < tasksCount; i++) { var id = i; tasks.Add(Task.Run(async() => { childTasksReached[id].SetResult(true); await Task.WhenAll(childTasksReached.Select(x => x.Task)); using (await store.GetTokenAsync("test")) { lock (log) { log.Add(id); }; await Task.Delay(10); lock (log) { log.Add(id); }; } })); } await Task.WhenAll(tasks); //Assert for (var i = 0; i < tasksCount; i++) { log[2 * i].ShouldBe(log[2 * i + 1]); } }
protected override void OnDisabled() { base.OnDisabled(); LockStore.ClearAllLocks(); LockAcquireEvents.Clear(); LockReleaseEvents.Clear(); GameEvents.onGameSceneLoadRequested.Remove(LockEvents.OnSceneRequested); }
/// <summary> /// Release the specified lock by sending a message to the server. /// </summary> /// <param name="lockDefinition">The definition of the lock to release</param> private void ReleaseLock(LockDefinition lockDefinition) { var msgData = NetworkMain.CliMsgFactory.CreateNewMessageData <LockReleaseMsgData>(); msgData.Lock.CopyFrom(lockDefinition); LockStore.RemoveLock(lockDefinition); LockEvent.onLockRelease.Fire(lockDefinition); MessageSender.SendMessage(msgData); }
public void TestLockNewLocks() { var lockStore = new LockStore(false); var o1 = lockStore.GetLockObject("MyString"); var o2 = lockStore.GetLockObject("MyString2"); Assert.AreNotEqual(o1, o2, "Should not have same lock object"); var o1_2 = lockStore.GetLockObject("MyString"); Assert.AreNotEqual(o1, o1_2, "Should have same lock object"); }
/// <summary> /// Acquire the specified lock by sending a message to the server. /// </summary> /// <param name="lockDefinition">The definition of the lock to acquire</param> /// <param name="force">Force the acquire. Usually false unless in dockings.</param> /// <param name="immediate">Acquire the lock immediately without waiting confirmation from the server</param> private void AcquireLock(LockDefinition lockDefinition, bool force = false, bool immediate = false) { var msgData = NetworkMain.CliMsgFactory.CreateNewMessageData <LockAcquireMsgData>(); msgData.Lock = lockDefinition; msgData.Force = force; MessageSender.SendMessage(msgData); if (force && immediate) { LockStore.AddOrUpdateLock(lockDefinition); } }
protected override void OnDisabled() { base.OnDisabled(); LockStore.ClearAllLocks(); }