Пример #1
0
 public static void AddOrUpdateSquelch(this Character character, uint squelchCharacterId, uint squelchAccountId, uint type, ReaderWriterLockSlim rwLock)
 {
     rwLock.EnterUpgradeableReadLock();
     try
     {
         var entity = character.CharacterPropertiesSquelch.FirstOrDefault(x => x.SquelchCharacterId == squelchCharacterId);
         rwLock.EnterWriteLock();
         try
         {
             if (entity == null)
             {
                 entity = new CharacterPropertiesSquelch {
                     CharacterId = character.Id, SquelchCharacterId = squelchCharacterId, SquelchAccountId = squelchAccountId, Type = type, Character = character
                 };
                 character.CharacterPropertiesSquelch.Add(entity);
             }
             else
             {
                 entity.SquelchAccountId = squelchAccountId;
                 entity.Type             = type;
             }
         }
         finally
         {
             rwLock.ExitWriteLock();
         }
     }
     finally
     {
         rwLock.ExitUpgradeableReadLock();
     }
 }
Пример #2
0
        public static bool TryRemoveSquelch(this Character character, uint squelchCharacterId, uint squelchAccountId, out CharacterPropertiesSquelch entity, ReaderWriterLockSlim rwLock)
        {
            rwLock.EnterUpgradeableReadLock();
            try
            {
                entity = character.CharacterPropertiesSquelch.FirstOrDefault(x => x.SquelchCharacterId == squelchCharacterId && x.SquelchAccountId == squelchAccountId);

                if (entity != null)
                {
                    rwLock.EnterWriteLock();
                    try
                    {
                        character.CharacterPropertiesSquelch.Remove(entity);
                        entity.Character = null;
                        return(true);
                    }
                    finally
                    {
                        rwLock.ExitWriteLock();
                    }
                }
                return(false);
            }
            finally
            {
                rwLock.ExitUpgradeableReadLock();
            }
        }