Exemplo n.º 1
0
 protected override void OnDisabled()
 {
     base.OnDisabled();
     LockStore.ClearAllLocks();
     LockAcquireEvents.Clear();
     LockReleaseEvents.Clear();
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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]);
            }
        }
Exemplo n.º 4
0
 protected override void OnDisabled()
 {
     base.OnDisabled();
     LockStore.ClearAllLocks();
     LockAcquireEvents.Clear();
     LockReleaseEvents.Clear();
     GameEvents.onGameSceneLoadRequested.Remove(LockEvents.OnSceneRequested);
 }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        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");
        }
Exemplo n.º 7
0
        /// <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);
            }
        }
Exemplo n.º 8
0
 protected override void OnDisabled()
 {
     base.OnDisabled();
     LockStore.ClearAllLocks();
 }