Пример #1
0
 private LockRecord UpdateLockRecord(LockRecord origRecord, LockRecord newRecord)
 {
     if (origRecord == null)
     {
         return(newRecord);
     }
     origRecord.Reason     = newRecord.Reason;
     origRecord.AdminId    = newRecord.AdminId;
     origRecord.LockoutEnd = newRecord.LockoutEnd;
     return(origRecord);
 }
Пример #2
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void acquireSharedLocksDuringSlaveWriteTx()
        public virtual void AcquireSharedLocksDuringSlaveWriteTx()
        {
            HighlyAvailableGraphDatabase anySlave = _managedCluster.AnySlave;
            HighlyAvailableGraphDatabase master   = _managedCluster.Master;

            CreateSingleTestLabeledNode(master);

            LockRecord         sharedLabelLock = LockRecord.of(false, ResourceTypes.LABEL, 0);
            IList <LockRecord> requestedLocks  = GetRequestedLocks(anySlave);

            assertFalse(requestedLocks.Contains(sharedLabelLock));

            CreateSingleTestLabeledNode(anySlave);

            assertTrue(requestedLocks.Contains(sharedLabelLock));
        }
Пример #3
0
        public async Task EnterQueueAsync(string queueName)
        {
            if (AsyncContextLocks.Value == null)
            {
                throw new InvalidOperationException("AsyncEventWorkerLockCache has not been initialized on the active async context");
            }

            if (AsyncContextLocks.Value.ContainsKey(queueName))
            {
                throw new InvalidOperationException($"Async event queue '{queueName}' is already locked in the current async context");
            }

            LockRecord lockRecord = globalLocks.AddOrUpdate(queueName,
                                                            name => new LockRecord(new AsyncLock(), 1),
                                                            (name, existing) => new LockRecord(existing.Lock, existing.ReferenceCount + 1));

            var disposable = await lockRecord.Lock.LockAsync();

            AsyncContextLocks.Value[queueName] = disposable;
        }
Пример #4
0
    public void Release(SimLock lk, string frame)
    {
        if (locks.Count == 0)
        {
            Console.WriteLine("ERROR: released lock {0} at {1} while holding no locks!", lk, frame);
            return;
        }
        LockRecord top = locks [locks.Count - 1];

        if (top.lk != lk && !(lk.IsGlobalLock && HoldCount(lk) > 1))
        {
            Console.WriteLine("WARNING: released lock {0} at {1} out of order with {2} at {3}!", lk, frame, top.lk, top.frame);
        }
        for (int i = locks.Count - 1; i >= 0; --i)
        {
            if (locks [i].lk == lk)
            {
                locks.RemoveAt(i);
                break;
            }
        }
    }
        public async Task <UnlockResponse> UnlockAsync(Lockable lockable, string lockId)
        {
            if (lockable == null)
            {
                throw new ArgumentNullException(nameof(lockable));
            }
            else if (String.IsNullOrEmpty(lockId))
            {
                throw new ArgumentException(nameof(lockId));
            }

            var @lock = lockable.Locks.FirstOrDefault(l => l.Id == lockId);

            if (@lock == null)
            {
                throw new Exception("No such lock matching the id.");
            }

            var lockRecord = new LockRecord
            {
                IsShared     = @lock.IsShared,
                LockableId   = lockable.Id,
                LockedAt     = @lock.LockedAt,
                MaxLeaseDate = @lock.MaxLeaseDate,
                OwnerToken   = @lock.OwnerToken,
                UnlockedAt   = DateTime.Now
            };

            await lockRecordService.CreateAsync(lockRecord);

            lockable.Locks.Remove(@lock);
            var result = await UpdateAsync(lockable);

            return(new UnlockResponse
            {
                Lockable = result,
                LockRecord = lockRecord
            });
        }
Пример #6
0
        void HandleOpenItem(OpenItem packet)
        {
            Player player = GetPlayer();

            // ignore for remote control state
            if (player.m_unitMovedByMe != player)
            {
                return;
            }

            Item item = player.GetItemByPos(packet.Slot, packet.PackSlot);

            if (!item)
            {
                player.SendEquipError(InventoryResult.ItemNotFound);
                return;
            }

            ItemTemplate proto = item.GetTemplate();

            if (proto == null)
            {
                player.SendEquipError(InventoryResult.ItemNotFound, item);
                return;
            }

            // Verify that the bag is an actual bag or wrapped item that can be used "normally"
            if (!proto.GetFlags().HasAnyFlag(ItemFlags.HasLoot) && !item.HasFlag(ItemFields.Flags, ItemFieldFlags.Wrapped))
            {
                player.SendEquipError(InventoryResult.ClientLockedOut, item);
                Log.outError(LogFilter.Network, "Possible hacking attempt: Player {0} [guid: {1}] tried to open item [guid: {2}, entry: {3}] which is not openable!",
                             player.GetName(), player.GetGUID().ToString(), item.GetGUID().ToString(), proto.GetId());
                return;
            }

            // locked item
            uint lockId = proto.GetLockID();

            if (lockId != 0)
            {
                LockRecord lockInfo = CliDB.LockStorage.LookupByKey(lockId);
                if (lockInfo == null)
                {
                    player.SendEquipError(InventoryResult.ItemLocked, item);
                    Log.outError(LogFilter.Network, "WORLD:OpenItem: item [guid = {0}] has an unknown lockId: {1}!", item.GetGUID().ToString(), lockId);
                    return;
                }

                // was not unlocked yet
                if (item.IsLocked())
                {
                    player.SendEquipError(InventoryResult.ItemLocked, item);
                    return;
                }
            }

            if (item.HasFlag(ItemFields.Flags, ItemFieldFlags.Wrapped))// wrapped?
            {
                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHARACTER_GIFT_BY_ITEM);
                stmt.AddValue(0, item.GetGUID().GetCounter());
                SQLResult result = DB.Characters.Query(stmt);

                if (!result.IsEmpty())
                {
                    uint entry = result.Read <uint>(0);
                    uint flags = result.Read <uint>(1);

                    item.SetUInt64Value(ItemFields.GiftCreator, 0);
                    item.SetEntry(entry);
                    item.SetUInt32Value(ItemFields.Flags, flags);
                    item.SetState(ItemUpdateState.Changed, player);
                }
                else
                {
                    Log.outError(LogFilter.Network, "Wrapped item {0} don't have record in character_gifts table and will deleted", item.GetGUID().ToString());
                    player.DestroyItem(item.GetBagSlot(), item.GetSlot(), true);
                    return;
                }

                stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GIFT);
                stmt.AddValue(0, item.GetGUID().GetCounter());
                DB.Characters.Execute(stmt);
            }
            else
            {
                player.SendLoot(item.GetGUID(), LootType.Corpse);
            }
        }
Пример #7
0
        void HandleOpenItem(OpenItem packet)
        {
            Player player = GetPlayer();

            // ignore for remote control state
            if (player.GetUnitBeingMoved() != player)
            {
                return;
            }

            // additional check, client outputs message on its own
            if (!player.IsAlive())
            {
                player.SendEquipError(InventoryResult.PlayerDead);
                return;
            }

            Item item = player.GetItemByPos(packet.Slot, packet.PackSlot);

            if (!item)
            {
                player.SendEquipError(InventoryResult.ItemNotFound);
                return;
            }

            ItemTemplate proto = item.GetTemplate();

            if (proto == null)
            {
                player.SendEquipError(InventoryResult.ItemNotFound, item);
                return;
            }

            // Verify that the bag is an actual bag or wrapped item that can be used "normally"
            if (!proto.HasFlag(ItemFlags.HasLoot) && !item.IsWrapped())
            {
                player.SendEquipError(InventoryResult.ClientLockedOut, item);
                Log.outError(LogFilter.Network, "Possible hacking attempt: Player {0} [guid: {1}] tried to open item [guid: {2}, entry: {3}] which is not openable!",
                             player.GetName(), player.GetGUID().ToString(), item.GetGUID().ToString(), proto.GetId());
                return;
            }

            // locked item
            uint lockId = proto.GetLockID();

            if (lockId != 0)
            {
                LockRecord lockInfo = CliDB.LockStorage.LookupByKey(lockId);
                if (lockInfo == null)
                {
                    player.SendEquipError(InventoryResult.ItemLocked, item);
                    Log.outError(LogFilter.Network, "WORLD:OpenItem: item [guid = {0}] has an unknown lockId: {1}!", item.GetGUID().ToString(), lockId);
                    return;
                }

                // was not unlocked yet
                if (item.IsLocked())
                {
                    player.SendEquipError(InventoryResult.ItemLocked, item);
                    return;
                }
            }

            if (item.IsWrapped())// wrapped?
            {
                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHARACTER_GIFT_BY_ITEM);
                stmt.AddValue(0, item.GetGUID().GetCounter());
                _queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt)
                                            .WithCallback(result => HandleOpenWrappedItemCallback(item.GetPos(), item.GetGUID(), result)));
            }
            else
            {
                player.SendLoot(item.GetGUID(), LootType.Corpse);
            }
        }
Пример #8
0
        private void InnerUpdate()
        {
            if (Input.GetKeyDown(KeyCode.T) &&
                (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt)))
            {
                var chara = FkCharaMgr.FindSelectChara();
                if (chara != null)
                {
                    chara.Limbs().Foreach(bone =>
                    {
                        var r  = new LockRecord();
                        r.Bone = bone;
                        r.Pos  = bone.Transform.position;
                        r.Rot  = bone.Transform.rotation;
                        _lockRecord.Add(r);
                    });
                }
            }
            else if (Input.GetKeyDown(KeyCode.T) &&
                     (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)))
            {
                var go = Context.GuideObjectManager().selectObject;
                if (go != null && go.IsLimb())
                {
                    var chara = FkCharaMgr.FindSelectChara();
                    var bone  = chara.DicGuideBones[go];
                    var r     = new LockRecord();
                    r.Bone = bone;
                    r.Pos  = bone.Transform.position;
                    r.Rot  = bone.Transform.rotation;
                    _lockRecord.Add(r);
                }
                else if (go != null && (go.IsHead()))
                {
                    var r    = new LockRecord();
                    var bone = FkCharaMgr.BuildChara(go).Head;
                    r.Bone = bone;
                    r.Pos  = bone.Transform.position;
                    var cv = Context.MainCamera().transform.position - bone.Transform.position;
                    if (Input.GetKey(KeyCode.LeftControl))
                    {
                        r.Rot = Quaternion.FromToRotation(cv, bone.GuideObject.transformTarget.forward);
                    }
                    else
                    {
                        r.Rot = Quaternion.FromToRotation(cv, cv);
                    }
                    _headLocks.Add(r);
                }
            }
            else if (Input.GetKeyDown(KeyCode.T))
            {
                _lockRecord.Clear();
                _headLocks.Clear();
            }
            _lockRecord.ForEach(r =>
            {
                if (r.Pos != r.Bone.Transform.position)
                {
                    r.Bone.MoveTo(r.Pos);
                }
                if (r.Rot != r.Bone.Transform.rotation)
                {
                    r.Bone.TurnTo(r.Rot);
                }
            });
            _headLocks.ForEach(r =>
            {
                var bone   = r.Bone;
                var target = Context.MainCamera().transform.position - bone.Transform.position;
                var from   = new Vector3(0, 0, 1);
                var p1     = Quaternion.FromToRotation(from, target);
                var p2     = r.Rot;
                bone.TurnTo(p2 * p1);

                // var bone = r.Bone;
                // var go = new GameObject();
                // var target = Context.MainCamera().transform.position - bone.Transform.position;
                // var v1 = go.transform.forward;
                // var v2 = new Vector3(target.x, 0, target.z);
                // var axis = Vector3.Cross(v1, v2);
                // var angel = Vector3.Angle(v1, v2);
                // go.transform.RotateAround(go.transform.position, axis, angel);
                // axis = Vector3.Cross(v2, target);
                // angel = Vector3.Angle(v2, target);
                // go.transform.RotateAround(go.transform.position, axis, angel);
                // bone.TurnTo(go.transform.rotation);
                // GameObject.Destroy(go);
            });
        }