public void UpdateDatabase(RPPDatabase _Database, DateTime _EarliestDateTime)
        {
            var realmDBs = _Database.GetRealms();

            foreach (var realmDB in realmDBs)
            {
                foreach (var playerHistory in realmDB.Value.PlayersHistory)
                {
                    try
                    {
                        if (playerHistory.Value.GuildHistory.Count < 1)
                        {
                            continue;
                        }

                        if (playerHistory.Value.GuildHistory.Last().Uploader.GetTime() >= _EarliestDateTime)
                        {
                            List <string> guildsAffected = new List <string>();
                            for (int i = playerHistory.Value.GuildHistory.Count - 1; i >= 0; --i)
                            {
                                if (playerHistory.Value.GuildHistory[i].Uploader.GetTime() < _EarliestDateTime)
                                {
                                    break;
                                }

                                string guildName = playerHistory.Value.GuildHistory[i].Data.GuildName;
                                if (guildsAffected.Contains(guildName) == false)
                                {
                                    guildsAffected.Add(guildName);
                                }
                            }
                            foreach (string guildName in guildsAffected)
                            {
                                if (guildName == "nil" || guildName == "None")
                                {
                                    continue;
                                }
                                if (GetGuildSummary(realmDB.Value.Realm, guildName) == null)
                                {
                                    var newGuildSummary = new GuildSummary(guildName, realmDB.Value.Realm);
                                    newGuildSummary.InitCache();
                                    AddGuildSummary(newGuildSummary);
                                }
                            }
                            foreach (var guild in m_Guilds)
                            {
                                if (guild.Value.Realm == realmDB.Value.Realm)
                                {
                                    guild.Value.Update(playerHistory.Key, playerHistory.Value, _EarliestDateTime);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        VF_RealmPlayersDatabase.Logger.LogException(ex);
                    }
                }
            }
        }
        public static void UpdateSummaryDatabase(string _RootDirectory, RPPDatabase _Database)
        {
            PlayerSummaryDatabase database = null;
            string databaseFile            = _RootDirectory + "\\SummaryDatabase\\PlayerSummaryDatabase.dat";

            database = new PlayerSummaryDatabase(_Database);
            VF.Utility.SaveSerialize(databaseFile, database);
        }
        public PlayerSummaryDatabase(RPPDatabase _Database)
        {
            var realmDBs = _Database.GetRealms();

            foreach (var realmDB in realmDBs)
            {
                UpdateRealm(realmDB.Value);
            }
        }
        public static bool ReloadRPPDatabase(RPPDatabase _RPPDatabase, object _SynchronizationLockObject)
        {
            GC.Collect();
            bool reloadResult = _RPPDatabase.ReloadAllRealmDBs(Constants.RPPDbDir + "Database\\"
                                                               , true, _SynchronizationLockObject);//, new DateTime(2016, 1, 1, 0, 0, 0));

            GC.Collect();
            return(reloadResult);
        }
        public static RPPDatabase LoadRPPDatabase(bool _FirstTimeLoading = false)
        {
            GC.Collect();
            RPPDatabase database = new RPPDatabase(Constants.RPPDbDir + "Database\\");//, new DateTime(2016, 1, 1, 0, 0, 0));

            database.PurgeRealmDBs(true, true, (_FirstTimeLoading == false));
            GC.Collect();
            return(database);
        }
            public RPPDatabase _GetRPPDatabase(bool _WaitUntilLoaded = true)
            {
                if (m_RPPDatabase == null && _WaitUntilLoaded == false)
                {
                    if (Monitor.TryEnter(m_RealmPlayersMutex, 100) == false)
                    {
                        return(null);
                    }
                }
                else
                {
                    Monitor.Enter(m_RealmPlayersMutex);
                }
                RPPDatabase rppDatabase = m_RPPDatabase;

                if (rppDatabase == null)
                {
                    if (m_LoadRealmPlayersThread == null)
                    {
                        m_LoadRealmPlayersThread = new System.Threading.Thread(ReloadRealmPlayers);
                        m_LoadRealmPlayersThread.Start();
                    }
                    if (_WaitUntilLoaded == false)
                    {
                        Monitor.Exit(m_RealmPlayersMutex);
                        return(null);
                    }
                    while (rppDatabase == null)
                    {
                        Monitor.Exit(m_RealmPlayersMutex);
                        System.Threading.Thread.Sleep(100);
                        Monitor.Enter(m_RealmPlayersMutex);
                        rppDatabase = m_RPPDatabase;
                    }
                }
                else if ((DateTime.UtcNow - m_LastLoadedDateTime).TotalMinutes > 10)
                {
                    if (m_LoadRealmPlayersThread == null)
                    {
                        if (m_RPPDatabase.IsDBFilesUpdated(Constants.RPPDbDir + "Database\\", m_RealmPlayersMutex) == true)
                        {
                            m_LoadRealmPlayersThread = new System.Threading.Thread(ReloadRealmPlayers);
                            m_LoadRealmPlayersThread.Start();
                        }
                        else
                        {
                            m_LastLoadedDateTime = DateTime.UtcNow.AddMinutes(-5);
                        }
                    }
                }
                Monitor.Exit(m_RealmPlayersMutex);

                ApplicationInstance.Instance.BackupItemInfos();
                return(rppDatabase);
            }
Exemple #7
0
        public static void Thread_GenerateData(RPPDatabase _Database)
        {
            Logger.ConsoleWriteLine("TODO: Fix this!!!!!");
            for (int i = 0; i < 5; ++i)
            {
                var generatedContributorStatisticData = new Dictionary <WowRealm, Dictionary <int, ContributorStatisticItem> >();
                try
                {
                    ContributorStatisticItem lastUsedCSI = new ContributorStatisticItem();
                    foreach (var realm in _Database.GetRealms())
                    {
                        realm.Value.WaitForLoad(RealmDatabase.LoadStatus.EverythingLoaded);

                        if (generatedContributorStatisticData.ContainsKey(realm.Key) == false)
                        {
                            generatedContributorStatisticData.Add(realm.Key, new Dictionary <int, ContributorStatisticItem>());
                        }
                        var realmCSD = generatedContributorStatisticData[realm.Key];

                        foreach (var playerHistory in realm.Value.PlayersHistory)
                        {
                            var playerUpdates = playerHistory.Value.GetUpdates();
                            foreach (var playerUpdate in playerUpdates)
                            {
                                var currContributorID = playerUpdate.GetContributorID();
                                if (lastUsedCSI.m_ContributorID != currContributorID)
                                {
                                    if (realmCSD.ContainsKey(currContributorID) == false)
                                    {
                                        realmCSD.Add(currContributorID, new ContributorStatisticItem(currContributorID));
                                    }
                                    lastUsedCSI = realmCSD[currContributorID];
                                }
                                lastUsedCSI.AddInspectData(playerHistory.Key, playerUpdate.GetTime());
                            }
                        }
                    }
                    sm_ContributorStatisticData = generatedContributorStatisticData;
                    break;
                }
                catch (Exception ex)
                {
                    Logger.LogException(ex);
                    System.Threading.Thread.Sleep(500);
                    Logger.ConsoleWriteLine("Thread_GenerateData() Trying again!");
                }
            }
        }
Exemple #8
0
 public static void AssertInitialize(RPPDatabase _Database, bool _WaitUntilLoaded = false)
 {
     lock (sm_LoadTaskMutex)
     {
         if (sm_LoadTask == null || (DateTime.UtcNow - sm_LastGenerationTime).TotalMinutes > 300) //5 hours
         {
             sm_LastGenerationTime = DateTime.UtcNow;
             sm_LoadTask           = new System.Threading.Tasks.Task(new Action(() => { Thread_GenerateData(_Database); }));
             sm_LoadTask.Start();
         }
     }
     if (_WaitUntilLoaded == true && sm_LoadTask.IsCompleted == false)
     {
         sm_LoadTask.Wait();
     }
 }
        public static void UpdateSummaryDatabase(string _RootDirectory, RPPDatabase _Database, bool _UpdateAllHistory = false)
        {
            GuildSummaryDatabase database = null;
            string databaseFile           = _RootDirectory + "\\SummaryDatabase\\GuildSummaryDatabase.dat";

            if (System.IO.File.Exists(databaseFile) == true)
            {
                if (Utility.LoadSerialize(databaseFile, out database, 10000, true) == false)
                {
                    database = null;
                }
                if (database == null)
                {
                    VF_RealmPlayersDatabase.Logger.ConsoleWriteLine("Armory: Failed to load GuildSummaryDatabase. Skipping update!");
                    return;
                }
            }
            if (database != null)
            {
                foreach (var guild in database.m_Guilds)
                {
                    guild.Value.InitCache();
                }
            }
            if (database == null)
            {
                database = new GuildSummaryDatabase();
                database.UpdateDatabase(_Database);
            }
            else
            {
                if (_UpdateAllHistory == true)
                {
                    database.UpdateDatabase(_Database);
                }
                else
                {
                    database.UpdateDatabase(_Database, DateTime.UtcNow.AddDays(-8));
                }
            }
            Utility.SaveSerialize(databaseFile, database);
            VF_RealmPlayersDatabase.Logger.ConsoleWriteLine("Armory: Successfully updated GuildSummaryDatabase!");
        }
        public static void UpdateSummaryDatabase(string _RootDirectory, RPPDatabase _Database, bool _UpdateAllHistory = false)
        {
            ItemSummaryDatabase database = null;
            string databaseFile          = _RootDirectory + "\\SummaryDatabase\\ItemSummaryDatabase.dat";

            if (System.IO.File.Exists(databaseFile) == true)
            {
                if (VF.Utility.LoadSerialize(databaseFile, out database) == false)
                {
                    database = null;
                }
            }
            //if (database != null)
            //{
            //    foreach (var guild in database.m_Guilds)
            //    {
            //        guild.Value.InitCache();
            //    }
            //}
            if (database == null)
            {
                database = new ItemSummaryDatabase();
                database.UpdateDatabase(_Database);
            }
            else
            {
                if (_UpdateAllHistory == true)
                {
                    database.UpdateDatabase(_Database);
                }
                else
                {
                    database.UpdateDatabase(_Database, DateTime.UtcNow.AddDays(-8));
                }
            }
            VF.Utility.SaveSerialize(databaseFile, database);
        }
 //public void SaveUserActivityData()
 //{
 //    Monitor.Enter(m_RealmPlayersMutex);
 //    try
 //    {
 //        VF_RealmPlayersDatabase.Utility.BackupFile(Constants.RPPDbWriteDir + "VF_UsersOnSite.dat");
 //        m_LastUserActivitySave = DateTime.Now;
 //        Logger.ConsoleWriteLine("SaveUserActivityData(): Saved VF_UsersOnSite.dat", ConsoleColor.Yellow);
 //    }
 //    catch (Exception)
 //    { }
 //    Monitor.Exit(m_RealmPlayersMutex);
 //}
 public void ReloadRealmPlayers()
 {
     try
     {
         GC.Collect();
         bool     firstTimeLoading = (m_RPPDatabase == null);
         DateTime startLoadTime    = DateTime.UtcNow;
         if (firstTimeLoading == true)
         {
             RPPDatabase rppDatabase = DatabaseLoader.LoadRPPDatabase(firstTimeLoading);
             lock (m_RealmPlayersMutex)
             {
                 m_RPPDatabase           = rppDatabase;
                 m_ContributorStatistics = null;
                 m_LastLoadedDateTime    = DateTime.UtcNow;
             }
             m_ThreadSafeCache.ClearCache("FindPlayersMatching");
         }
         else
         {
             if (DatabaseLoader.ReloadRPPDatabase(m_RPPDatabase, m_RealmPlayersMutex) == true)
             {
                 m_ContributorStatistics = null;
                 m_ThreadSafeCache.ClearCache("FindPlayersMatching");
                 m_LastLoadedDateTime = DateTime.UtcNow;
             }
         }
         m_LoadRealmPlayersThread = null;
         Logger.ConsoleWriteLine("LoadRPPDatabase(): Reloaded database, it took: " + (int)(DateTime.UtcNow - startLoadTime).TotalSeconds + " seconds", ConsoleColor.Green);
         GC.Collect();
     }
     catch (Exception ex)
     {
         Logger.LogException(ex);
     }
 }
        public void UpdateDatabase(RPPDatabase _Database, DateTime _EarliestDateTime)
        {
            List <string> failedMountItemNames     = new List <string>();
            List <string> failedCompanionItemNames = new List <string>();

            var realmDBs = _Database.GetRealms();

            foreach (var realmDB in realmDBs)
            {
                realmDB.Value.WaitForLoad(VF_RealmPlayersDatabase.RealmDatabase.LoadStatus.PlayersHistoryLoaded);
                foreach (var playerHistory in realmDB.Value.PlayersHistory)
                {
                    try
                    {
                        if (playerHistory.Value.GearHistory.Count < 1 || playerHistory.Value.GearHistory.Last().Uploader.GetTime() < _EarliestDateTime)
                        {
                            continue;
                        }

                        UInt64 playerID = GetEntityID(realmDB.Value.Realm, playerHistory.Key);

                        foreach (var gearHistory in playerHistory.Value.GearHistory)
                        {
                            if (gearHistory.Uploader.GetTime() < _EarliestDateTime)
                            {
                                continue;
                            }

                            foreach (var item in gearHistory.Data.Items)
                            {
                                var itemSummary  = GetItemSummary(item.Value);
                                var optionalSlot = item.Value.Slot;
                                if (item.Value.Slot == ItemSlot.Finger_1)
                                {
                                    optionalSlot = ItemSlot.Finger_2;
                                }
                                else if (item.Value.Slot == ItemSlot.Finger_2)
                                {
                                    optionalSlot = ItemSlot.Finger_1;
                                }
                                else if (item.Value.Slot == ItemSlot.Trinket_1)
                                {
                                    optionalSlot = ItemSlot.Trinket_2;
                                }
                                else if (item.Value.Slot == ItemSlot.Trinket_2)
                                {
                                    optionalSlot = ItemSlot.Trinket_1;
                                }
                                else if (item.Value.Slot == ItemSlot.Main_Hand)
                                {
                                    optionalSlot = ItemSlot.Off_Hand;
                                }
                                else if (item.Value.Slot == ItemSlot.Off_Hand)
                                {
                                    optionalSlot = ItemSlot.Main_Hand;
                                }

                                if (item.Value.Slot != optionalSlot)
                                {
                                    ItemInfo optionalItemInfo;
                                    if (gearHistory.Data.Items.TryGetValue(optionalSlot, out optionalItemInfo) == true)
                                    {
                                        //Possible duplicate, check it out
                                        if (optionalItemInfo.ItemID == item.Value.ItemID &&
                                            optionalItemInfo.SuffixID == item.Value.SuffixID)
                                        {
                                            //Add duplicate
                                            itemSummary.AddOwner(playerID, gearHistory.Uploader.GetTime(), true);
                                        }
                                        else
                                        {
                                            //No duplicates
                                            itemSummary.AddOwner(playerID, gearHistory.Uploader.GetTime());
                                        }
                                    }
                                    else
                                    {
                                        //No duplicates
                                        itemSummary.AddOwner(playerID, gearHistory.Uploader.GetTime());
                                    }
                                }
                                else
                                {
                                    //No duplicates
                                    itemSummary.AddOwner(playerID, gearHistory.Uploader.GetTime());
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        VF_RealmPlayersDatabase.Logger.LogException(ex);
                    }
                }
                foreach (var playerExtraData in realmDB.Value.PlayersExtraData)
                {
                    try
                    {
                        UInt64 playerID = GetEntityID(realmDB.Value.Realm, playerExtraData.Key);

                        foreach (var mount in playerExtraData.Value.Mounts)
                        {
                            int mountID = VF.ItemTranslations.FindItemID(mount.Mount);
                            if (mountID > 0)
                            {
                                var itemSummary = GetItemSummary(mountID, 0);
                                itemSummary.AddOwner(playerID, mount.GetEarliestUpload().GetTime());
                            }
                            else
                            {
                                failedMountItemNames.AddUnique(mount.Mount);
                            }
                        }

                        foreach (var companion in playerExtraData.Value.Companions)
                        {
                            int companionID = VF.ItemTranslations.FindItemID(companion.Name);
                            if (companionID > 0)
                            {
                                var itemSummary = GetItemSummary(companionID, 0);
                                itemSummary.AddOwner(playerID, companion.GetEarliestUpload().GetTime());
                            }
                            else
                            {
                                failedCompanionItemNames.AddUnique(companion.Name);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        VF_RealmPlayersDatabase.Logger.LogException(ex);
                    }
                }
            }
            VF_RealmPlayersDatabase.Logger.ConsoleWriteLine("Failed to add Mounts with names: " + String.Join("\", \"", failedMountItemNames.ToArray()) + "\"");
            VF_RealmPlayersDatabase.Logger.ConsoleWriteLine("Failed to add Companions with names: " + String.Join("\", \"", failedCompanionItemNames.ToArray()) + "\"");
        }
 public void UpdateDatabase(RPPDatabase _Database)
 {
     UpdateDatabase(_Database, DateTime.MinValue);
 }
        public static void UpdateSummaryDatabase(string _RootDirectory, RPPDatabase _Database, bool _UpdateAllHistory = false)
        {
            ItemSummaryDatabase database = null;
            string databaseFile          = _RootDirectory + "\\SummaryDatabase\\ItemSummaryDatabase.dat";

            if (System.IO.File.Exists(databaseFile) == true)
            {
                if (VF.Utility.LoadSerialize(databaseFile, out database, 10000, true) == false)
                {
                    database = null;
                }

                //Update the new dictionary realm with all the old entitycounters!
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Emerald_Dream, database.m_EntityCounter_Emerald_Dream);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Warsong, database.m_EntityCounter_Warsong);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Al_Akir, database.m_EntityCounter_Al_Akir);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Valkyrie, database.m_EntityCounter_Valkyrie);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.VanillaGaming, database.m_EntityCounter_VanillaGaming);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Rebirth, database.m_EntityCounter_Rebirth);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Archangel, database.m_EntityCounter_Archangel);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Nostalrius, database.m_EntityCounter_Nostalrius);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Kronos, database.m_EntityCounter_Kronos);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.NostalGeek, database.m_EntityCounter_NostalGeek);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Nefarian, database.m_EntityCounter_Nefarian);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.NostalriusPVE, database.m_EntityCounter_NostalriusPVE);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.WarsongTBC, database.m_EntityCounter_WarsongTBC);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.KronosII, database.m_EntityCounter_KronosII);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Vengeance_Wildhammer, database.m_EntityCounter_Vengeance_Wildhammer);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.ExcaliburTBC, database.m_EntityCounter_ExcaliburTBC);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.L4G_Hellfire, database.m_EntityCounter_L4G_Hellfire);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Warsong2, database.m_EntityCounter_Warsong2);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Vengeance_Stonetalon, database.m_EntityCounter_Vengeance_Stonetalon);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Elysium, database.m_EntityCounter_Elysium);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Elysium2, database.m_EntityCounter_Elysium2);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Zeth_Kur, database.m_EntityCounter_Zeth_Kur);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Nemesis, database.m_EntityCounter_Nemesis);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.HellGround, database.m_EntityCounter_HellGround);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Nostralia, database.m_EntityCounter_Nostralia);
                database.m_EntityCounters_Realm.AddIfKeyNotExist(WowRealm.Hellfire2, database.m_EntityCounter_Hellfire2);
            }
            //if (database != null)
            //{
            //    foreach (var guild in database.m_Guilds)
            //    {
            //        guild.Value.InitCache();
            //    }
            //}
            if (database == null)
            {
                database = new ItemSummaryDatabase();
                database.UpdateDatabase(_Database);
            }
            else
            {
                if (_UpdateAllHistory == true)
                {
                    database.UpdateDatabase(_Database);
                }
                else
                {
                    database.UpdateDatabase(_Database, DateTime.UtcNow.AddDays(-8));
                }
            }
            VF.Utility.SaveSerialize(databaseFile, database);
        }
Exemple #15
0
 public RPPDatabase(string _DatabaseDirectory)
 {
     m_RPPDatabase = GetDatabase(_DatabaseDirectory);
 }
Exemple #16
0
 private static VF_RealmPlayersDatabase.Database _NotCached_GetDatabase(string _DatabaseDirectory)
 {
     VF_RealmPlayersDatabase.Database rppDatabase = new VF_RealmPlayersDatabase.Database(_DatabaseDirectory);
     rppDatabase.PurgeRealmDBs(true, false);
     return(rppDatabase);
 }