fCraft.PlayerDB.GetWriteLock C# (CSharp) Method

GetWriteLock() public static method

public static GetWriteLock ( ) : WriteLockHelper
return WriteLockHelper
        public static WriteLockHelper GetWriteLock() {
            return new WriteLockHelper( SyncRoot );
        }

Usage Example

        internal void LoadBinary()
        {
            using (PlayerDB.GetWriteLock()) {
                if (File.Exists(Paths.PlayerDBFileName + ".bin"))
                {
                    using (FileStream fs = OpenRead(Paths.PlayerDBFileName + ".bin")) {
                        BinaryReader reader  = new BinaryReader(fs);
                        int          version = reader.ReadInt32();

                        if (version > FormatVersion)
                        {
                            Logger.Log(LogType.Warning,
                                       "PlayerDB.LoadBinary: Attempting to load unsupported PlayerDB format ({0}). Errors may occur.",
                                       version);
                        }
                        else if (version < FormatVersion)
                        {
                            Logger.Log(LogType.Warning,
                                       "PlayerDB.LoadBinary: Converting PlayerDB to a newer format (version {0} to {1}).",
                                       version, FormatVersion);
                        }

                        maxID = reader.ReadInt32();

                        int rankCount = reader.ReadInt32();
                        rankMapping = new Dictionary <int, Rank>(rankCount);
                        for (int i = 0; i < rankCount; i++)
                        {
                            byte   rankIndex = reader.ReadByte();
                            string rankName  = reader.ReadString();
                            Rank   rank      = Rank.Parse(rankName);
                            if (rank == null)
                            {
                                Logger.Log(LogType.Error,
                                           "PlayerDB.LoadBinary: Could not parse rank: \"{0}\". Assigning rank {1} instead.",
                                           rankName, RankManager.DefaultRank);
                                rank = RankManager.DefaultRank;
                            }
                            rankMapping.Add(rankIndex, rank);
                        }
                        int records = reader.ReadInt32();

                        int emptyRecords = 0;
                        for (int i = 0; i < records; i++)
                        {
#if !DEBUG
                            try {
#endif
                            PlayerInfo info = LoadBinaryFormat0(reader);

                            if (info.ID > maxID)
                            {
                                maxID = info.ID;
                                Logger.Log(LogType.Warning,
                                           "PlayerDB.LoadBinary: Adjusting wrongly saved MaxID ({0} to {1}).");
                            }

                            // A record is considered "empty" if the player has never logged in.
                            // Empty records may be created by /Import, /Ban, and /Rank commands on typos.
                            // Deleting such records should have no negative impact on DB completeness.
                            if ((info.LastIP.Equals(IPAddress.None) || info.LastIP.Equals(IPAddress.Any) ||
                                 info.TimesVisited == 0) &&
                                !info.IsBanned && info.Rank == RankManager.DefaultRank)
                            {
                                Logger.Log(LogType.SystemActivity,
                                           "PlayerDB.LoadBinary: Skipping an empty record for player \"{0}\"",
                                           info.Name);
                                emptyRecords++;
                                continue;
                            }

                            // Check for duplicates. Unless PlayerDB.txt was altered externally, this does not happen.
                            if (trie.ContainsKey(info.Name))
                            {
                                Logger.Log(LogType.Error,
                                           "PlayerDB.LoadBinary: Duplicate record for player \"{0}\" skipped.",
                                           info.Name);
                            }
                            else
                            {
                                trie.Add(info.Name, info);
                            }
#if !DEBUG
                        }
                        catch (Exception ex) {
                            Logger.LogAndReportCrash("Error while parsing PlayerInfo record",
                                                     "fCraft",
                                                     ex,
                                                     false);
                        }
#endif
                        }

                        if (emptyRecords > 0)
                        {
                            Logger.Log(LogType.Warning,
                                       "PlayerDB.LoadBinary: Skipped {0} empty records.", emptyRecords);
                        }
                    }
                }
                else
                {
                    Logger.Log(LogType.Warning, "PlayerDB.Load: No player DB file found.");
                }
            }
        }
All Usage Examples Of fCraft.PlayerDB::GetWriteLock