GetReadLock() public static method

public static GetReadLock ( ) : ReadLockHelper
return ReadLockHelper
        /// <summary> Finds player by name pattern. </summary>
        /// <param name="pattern"> Pattern to search for.
        /// Asterisk (*) matches zero or more characters.
        /// Question mark (?) matches exactly one character. </param>
        /// <param name="limit"> Maximum number of results to return. </param>
        /// <returns> A sequence of zero or more PlayerInfos whose names match the pattern. </returns>
        public IEnumerable <PlayerInfo> FindByPattern(string pattern, int limit)
        {
            if (pattern == null)
            {
                throw new ArgumentNullException("pattern");
            }
            string            regexString = "^" + RegexNonNameChars.Replace(pattern, "").Replace("*", ".*").Replace("?", ".") + "$";
            Regex             regex       = new Regex(regexString, RegexOptions.IgnoreCase);
            List <PlayerInfo> result      = new List <PlayerInfo>();

            using (PlayerDB.GetReadLock()) {
                int total = PlayerDB.List.Count;
                for (int i = 0; i < total; i++)
                {
                    if (regex.IsMatch(PlayerDB.List[i].Name))
                    {
                        result.Add(PlayerDB.List[i]);
                        if (result.Count >= limit)
                        {
                            break;
                        }
                    }
                }
            }
            return(result.ToArray());
        }
 /// <summary> Finds players by partial name (prefix). </summary>
 /// <param name="partialName"> Full or partial name of the player. </param>
 /// <param name="limit"> Maximum number of results to return. </param>
 /// <returns> A sequence of zero or more PlayerInfos whose names start with partialName. </returns>
 public IEnumerable <PlayerInfo> FindByPartialName(string partialName, int limit)
 {
     if (partialName == null)
     {
         throw new ArgumentNullException("partialName");
     }
     using (PlayerDB.GetReadLock()) {
         return(trie.GetList(partialName, limit).ToArray());
     }
 }
        static void MassRankHandler(Player player, CommandReader cmd)
        {
            string fromRankName = cmd.Next();
            string toRankName   = cmd.Next();
            string reason       = cmd.NextAll();

            if (fromRankName == null || toRankName == null)
            {
                CdMassRank.PrintUsage(player);
                return;
            }

            Rank fromRank = RankManager.FindRank(fromRankName);

            if (fromRank == null)
            {
                player.MessageNoRank(fromRankName);
                return;
            }

            Rank toRank = RankManager.FindRank(toRankName);

            if (toRank == null)
            {
                player.MessageNoRank(toRankName);
                return;
            }

            if (fromRank == toRank)
            {
                player.Message("Ranks must be different");
                return;
            }

            int playerCount;

            using (PlayerDB.GetReadLock()) {
                playerCount = PlayerDB.List.Count(t => t.Rank == fromRank);
            }
            string verb = (fromRank > toRank ? "demot" : "promot");

            if (!cmd.IsConfirmed)
            {
                player.Confirm(cmd, "MassRank: {0}e {1} players?", verb.UppercaseFirst(), playerCount);
                return;
            }

            player.Message("MassRank: {0}ing {1} players...",
                           verb, playerCount);

            int affected = PlayerDB.MassRankChange(player, fromRank, toRank, reason);

            player.Message("MassRank: done, {0} records affected.", affected);
        }
        /// <summary> Finds players by IP address. </summary>
        /// <param name="address"> Player's IP address. </param>
        /// <param name="limit"> Maximum number of results to return. </param>
        /// <returns> A sequence of zero or more PlayerInfos who have logged in from given IP. </returns>
        public IEnumerable <PlayerInfo> FindByIP(IPAddress address, int limit)
        {
            if (address == null)
            {
                throw new ArgumentNullException("address");
            }
            List <PlayerInfo> result = new List <PlayerInfo>();

            using (PlayerDB.GetReadLock()) {
                int total = PlayerDB.List.Count;
                for (int i = 0; i < total; i++)
                {
                    if (PlayerDB.List[i].LastIP.Equals(address))
                    {
                        result.Add(PlayerDB.List[i]);
                        if (result.Count >= limit)
                        {
                            break;
                        }
                    }
                }
                return(result.ToArray());
            }
        }