Exemple #1
0
        /// <summary>
        /// Join two KParser parses.  They must have already had
        /// timestamps upgraded, if applicable.
        /// </summary>
        private void JoinKParserDB()
        {
            int  rowCount   = 0;
            int  totalCount = 0;
            bool completed  = false;

            try
            {
                KParserReadingManager db1 = dbReaderManager as KParserReadingManager;
                if (db1 == null)
                {
                    throw new ArgumentNullException();
                }
                if (db1.Database == null)
                {
                    throw new ArgumentNullException();
                }

                KParserReadingManager db2 = dbReaderManager2 as KParserReadingManager;
                if (db2 == null)
                {
                    throw new ArgumentNullException();
                }
                if (db2.Database == null)
                {
                    throw new ArgumentNullException();
                }

                var allLines = Enumerable.Concat
                                   (db1.Database.RecordLog.AsEnumerable(),
                                   db2.Database.RecordLog.AsEnumerable());

                var orderedLines = from line in allLines
                                   orderby line.Timestamp, line.RecordLogID
                select line;

                List <ChatLine> chatLines = new List <ChatLine>(100);

                totalCount = allLines.Count();

                // Read the (fixed) record log from the database, reconstruct
                // the chat line, and send it to the new database.
                foreach (var logLine in orderedLines)
                {
                    rowCount++;
                    if (IsRunning == false)
                    {
                        break;
                    }

                    chatLines.Add(new ChatLine(logLine.MessageText, logLine.Timestamp));

                    OnReaderStatusChanged(new ReaderStatusEventArgs(rowCount, totalCount, completed, false));

                    if (chatLines.Count > 99)
                    {
                        OnReaderDataChanged(new ReaderDataEventArgs(chatLines));
                        chatLines = new List <ChatLine>(100);
                    }
                }

                if (chatLines.Count > 0)
                {
                    OnReaderDataChanged(new ReaderDataEventArgs(chatLines));
                }

                completed = IsRunning;

                List <PlayerInfo> playerInfoList = new List <PlayerInfo>();

                foreach (var player in db1.Database.Combatants)
                {
                    playerInfoList.Add(new PlayerInfo()
                    {
                        Name          = player.CombatantName,
                        CombatantType = (EntityType)player.CombatantType,
                        Info          = player.PlayerInfo
                    });
                }

                foreach (var player in db2.Database.Combatants)
                {
                    playerInfoList.Add(new PlayerInfo()
                    {
                        Name          = player.CombatantName,
                        CombatantType = (EntityType)player.CombatantType,
                        Info          = player.PlayerInfo
                    });
                }

                WaywardGamers.KParser.Parsing.MsgManager.Instance.PlayerInfoList = playerInfoList;
            }
            catch (ThreadAbortException e)
            {
                Logger.Instance.Log(e);
            }
            catch (Exception e)
            {
                Logger.Instance.Log(e);
            }
            finally
            {
                IsRunning = false;
                OnReaderStatusChanged(new ReaderStatusEventArgs(rowCount, totalCount, completed, (completed == false)));
                dbReaderManager.CloseDatabase();
                dbReaderManager2.CloseDatabase();
            }
        }
Exemple #2
0
        /// <summary>
        /// Import data from another database (reparse, DVS, DirectParse, etc)
        /// </summary>
        /// <param name="inFilename1">The name of the first database file to import.</param>
        /// <param name="inFilename2">The name of the second database file to import.</param>
        /// <param name="outputFileName">The name of the new database.</param>
        /// <param name="importSource">The type of database to import.</param>
        public void JoinAll(List <string> inFilenames, string outputFileName, ImportSourceType importSource)
        {
            try
            {
                if (currentReader.IsRunning == true)
                {
                    throw new InvalidOperationException(string.Format(
                                                            "{0} is already running", currentReader.GetType().Name));
                }

                if (inFilenames.Count < 2)
                {
                    throw new ArgumentOutOfRangeException("inFilenames",
                                                          "At least two files must be selected for joining.");
                }

                if (importSource != ImportSourceType.KParser)
                {
                    throw new ArgumentOutOfRangeException("importSource",
                                                          "Can only perform joins on KParser parses.");
                }


                currentReader = DatabaseReader.Instance;

                DatabaseManager.Instance.CreateDatabase(outputFileName);
                System.Threading.Thread.Sleep(100);

                IDBReader dbReader  = KParserReadingManager.Instance;
                IDBReader dbReader2 = new KParserReadingManager();

                var mainParse   = inFilenames.First();
                var otherParses = inFilenames.Skip(1);

                dbReader.OpenDatabase(mainParse);

                if (dbReader.DatabaseParseVersion.CompareTo("1.3") < 0)
                {
                    throw new InvalidOperationException("Reparse to upgrade timestamps first.");
                }

                foreach (var parse in otherParses)
                {
                    try
                    {
                        dbReader2.OpenDatabase(parse);

                        try
                        {
                            MsgManager.Instance.StartNewSession();

                            currentReader.Join(importSource, dbReader, dbReader2);
                        }
                        catch (Exception)
                        {
                            MsgManager.Instance.EndSession();
                            throw;
                        }
                    }
                    finally
                    {
                        dbReader2.CloseDatabase();
                    }
                }
            }
            catch (Exception)
            {
                ReaderStatusListener(currentReader, new ReaderStatusEventArgs(0, 0, false, true));
                throw;
            }
        }
Exemple #3
0
        /// <summary>
        /// Import (reparse) KParser database files.
        /// </summary>
        private void ImportKParserDB()
        {
            int  rowCount   = 0;
            int  totalCount = 0;
            bool completed  = false;

            try
            {
                KParserReadingManager readingManager = dbReaderManager as KParserReadingManager;
                if (readingManager == null)
                {
                    throw new ArgumentNullException();
                }

                KPDatabaseReadOnly readDataSet = readingManager.Database;
                if (readDataSet != null)
                {
                    List <ChatLine> chatLines = new List <ChatLine>(100);

                    totalCount = readDataSet.RecordLog.Count;

                    // Read the (fixed) record log from the database, reconstruct
                    // the chat line, and send it to the new database.
                    foreach (var logLine in readDataSet.RecordLog)
                    {
                        rowCount++;
                        if (IsRunning == false)
                        {
                            break;
                        }

                        if (useTimeRange == true)
                        {
                            DateTime logLineTime = logLine.Timestamp;
                            if (upgradeTimestamp == true)
                            {
                                logLineTime = logLine.Timestamp.ToUniversalTime();
                            }

                            if ((logLineTime >= startOfTimeRange) && (logLineTime <= endOfTimeRange))
                            {
                                chatLines.Add(new ChatLine(logLine.MessageText, logLineTime));
                            }
                        }
                        else
                        {
                            if (upgradeTimestamp == true)
                            {
                                chatLines.Add(new ChatLine(logLine.MessageText, logLine.Timestamp.ToUniversalTime()));
                            }
                            else
                            {
                                chatLines.Add(new ChatLine(logLine.MessageText, logLine.Timestamp));
                            }
                        }

                        OnReaderStatusChanged(new ReaderStatusEventArgs(rowCount, totalCount, completed, false));

                        if (chatLines.Count > 99)
                        {
                            OnReaderDataChanged(new ReaderDataEventArgs(chatLines));
                            chatLines = new List <ChatLine>(100);
                        }
                    }

                    if (chatLines.Count > 0)
                    {
                        OnReaderDataChanged(new ReaderDataEventArgs(chatLines));
                    }

                    completed = IsRunning;

                    List <PlayerInfo> playerInfoList = new List <PlayerInfo>();
                    foreach (var player in readDataSet.Combatants)
                    {
                        playerInfoList.Add(new PlayerInfo()
                        {
                            Name          = player.CombatantName,
                            CombatantType = (EntityType)player.CombatantType,
                            Info          = player.PlayerInfo
                        });
                    }

                    WaywardGamers.KParser.Parsing.MsgManager.Instance.PlayerInfoList = playerInfoList;
                }
                else
                {
                    throw new InvalidDataException("No database to parse.");
                }
            }
            catch (ThreadAbortException e)
            {
                Logger.Instance.Log(e);
            }
            catch (Exception e)
            {
                Logger.Instance.Log(e);
            }
            finally
            {
                IsRunning = false;
                OnReaderStatusChanged(new ReaderStatusEventArgs(rowCount, totalCount, completed, (completed == false)));
                dbReaderManager.CloseDatabase();
            }
        }
Exemple #4
0
        /// <summary>
        /// Import data from another database (reparse, DVS, DirectParse, etc)
        /// </summary>
        /// <param name="inFilename1">The name of the first database file to import.</param>
        /// <param name="inFilename2">The name of the second database file to import.</param>
        /// <param name="outputFileName">The name of the new database.</param>
        /// <param name="importSource">The type of database to import.</param>
        public void Join(string inFilename1, string inFilename2, string outputFileName,
                         ImportSourceType importSource)
        {
            try
            {
                if (currentReader.IsRunning == true)
                {
                    throw new InvalidOperationException(string.Format(
                                                            "{0} is already running", currentReader.GetType().Name));
                }

                currentReader = DatabaseReader.Instance;

                DatabaseManager.Instance.CreateDatabase(outputFileName);
                System.Threading.Thread.Sleep(100);

                IDBReader dbReader;
                IDBReader dbReader2;

                switch (importSource)
                {
                case ImportSourceType.KParser:
                    dbReader  = KParserReadingManager.Instance;
                    dbReader2 = new KParserReadingManager();
                    break;

                case ImportSourceType.DirectParse:
                case ImportSourceType.DVSParse:
                // Not supported
                default:
                    throw new InvalidOperationException();
                }

                dbReader.OpenDatabase(inFilename1);
                dbReader2.OpenDatabase(inFilename2);

                if (dbReader is KParserReadingManager)
                {
                    // Auto-detect files needing timestamp upgrades.
                    if (dbReader.DatabaseParseVersion.CompareTo("1.3") < 0)
                    {
                        throw new InvalidOperationException("Reparse to upgrade timestamps first.");
                    }
                    if (dbReader2.DatabaseParseVersion.CompareTo("1.3") < 0)
                    {
                        throw new InvalidOperationException("Reparse to upgrade timestamps first.");
                    }
                }

                try
                {
                    MsgManager.Instance.StartNewSession();

                    currentReader.Join(importSource, dbReader, dbReader2);
                }
                catch (Exception)
                {
                    MsgManager.Instance.EndSession();
                    throw;
                }
            }
            catch (Exception)
            {
                ReaderStatusListener(currentReader, new ReaderStatusEventArgs(0, 0, false, true));
                throw;
            }
        }