Exemplo n.º 1
0
        public static void Setup(TestContext context)
        {
            var replayData = ReplayParser.FromTextReader(TestDataReader.GetInputFile("Power_2.log.txt"));

            //var replayData = ReplaySerializer.Deserialize(TestDataReader.GetInputFile("Power_2.log.xml"));
            _replay = new Replay(replayData);
            _replay.LoadGame(0);
        }
Exemplo n.º 2
0
        public void BundlesWithVisitor()
        {
            var files   = Bundles.All.SelectMany(Directory.EnumerateFiles);
            var visitor = new Shanten5EvaluatingVisitor();

            foreach (var file in files)
            {
                ReplayParser.Parse(file, visitor);
            }

            Assert.Equal(0, visitor.ErrorCount);
        }
Exemplo n.º 3
0
        public void ParseTest03()
        {
            var replayParser = new ReplayParser();

            var memoryStream = new MemoryStream(ReplayParserTestResources._3v3_Tourney_Viteska_Brigada_B5P);

            var replayDto = replayParser.ParseFile(memoryStream);

            Assert.IsNotNull(replayDto);
            Assert.AreEqual(1, replayDto.IsNetworkMode);
            Assert.AreEqual("430000610", replayDto.Version);
        }
Exemplo n.º 4
0
        public void ParseTest02()
        {
            var replayParser = new ReplayParser();

            var memoryStream = new MemoryStream(ReplayParserTestResources.WRG_B5P_vs_1144_Tough_Jungle);

            var replayDto = replayParser.ParseFile(memoryStream);

            Assert.IsNotNull(replayDto);
            Assert.AreEqual(1, replayDto.IsNetworkMode);
            Assert.AreEqual("430000610", replayDto.Version);
        }
Exemplo n.º 5
0
        private void btnBrowse_Click(object sender, RoutedEventArgs e)
        {
            using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
                openFileDialog.Filter = "Replay files (*.wotreplay)|*.wotreplay";

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    SelectReplay(ReplayParser.Parse(openFileDialog.FileName));
                }
            }
        }
        public void BundlesWithClassicVisitor()
        {
            var files   = Bundles.All.SelectMany(Directory.EnumerateFiles);
            var visitor = new ClassicScoreCalculatingVisitor();

            foreach (var file in files)
            {
                ReplayParser.Parse(file, visitor);
            }

            Assert.Equal(0, visitor.FailureCount);
        }
Exemplo n.º 7
0
        private void listReplays_SelectedIndexChanged(object sender, EventArgs e)
        {
            string replayName = (string)listReplays.SelectedItem;

            if (!replayName.Equals("Set playback directory"))
            {
                try
                {
                    ReplayParser replayFile = new ReplayParser((string)Settings.Default["PlaybackDir"] + "\\" + replayName + ".rec");
                    Replay       replay     = replayFile.Parse();

                    TimeSpan duration = new TimeSpan(0, 0, replay.Duration / 8);

                    replayInfo.Clear();
                    replayInfo.AppendText("Name: " + replayName + Environment.NewLine);
                    replayInfo.AppendText("Version: 3.0.0." + replay.Version + Environment.NewLine);
                    replayInfo.AppendText("Map: " + replay.MapFile + Environment.NewLine);
                    replayInfo.AppendText("Length: " + string.Format("{0:0}:{1:00}:{2:00}", duration.Hours, duration.Minutes, duration.Seconds) + Environment.NewLine);
                    replayInfo.AppendText("Date: " + replay.Date + Environment.NewLine);
                    replayInfo.AppendText("Win Condition: " + replay.WinCondition);

                    gridTeam1.Rows.Clear();
                    gridTeam2.Rows.Clear();

                    ResourceManager resources = new ResourceManager("CoH2ReplayTools.Properties.Resources", typeof(mainForm).Assembly);

                    foreach (Player player in replay.Players)
                    {
                        if (player.TeamID == 0)
                        {
                            gridTeam1.Rows.Add(resources.GetObject("_" + player.FactionID) as Image, player.Name, "--", player.SteamID);
                        }
                        else
                        {
                            gridTeam2.Rows.Add(resources.GetObject("_" + player.FactionID) as Image, player.Name, "--", player.SteamID);
                        }
                    }
                }
                catch (InvalidVersionException ex) { MessageBox.Show(ex.Message); }
            }
        }
Exemplo n.º 8
0
        public void ParseTest01()
        {
            var replayParser = new ReplayParser();

            var memoryStream = new MemoryStream(ReplayParserTestResources.Steel_Balalaika_vs_We_suck_at_wargame_3vs3);

            var replayDto = replayParser.ParseFile(memoryStream);

            Assert.IsNotNull(replayDto);
            Assert.AreEqual(1, replayDto.IsNetworkMode);
            Assert.AreEqual("430000610", replayDto.Version);
            Assert.AreEqual("1", replayDto.GameMode);
            Assert.AreEqual(6, replayDto.NbMaxPlayer);
            Assert.AreEqual(0, replayDto.NbAI);
            Assert.AreEqual("0", replayDto.GameType);
            Assert.AreEqual(1, replayDto.Private);
            Assert.AreEqual(3000, replayDto.InitMoney);
            Assert.AreEqual(2400, replayDto.TimeLimit);
            Assert.AreEqual(500, replayDto.ScoreLimit);
            Assert.AreEqual("Игра (|:Serega:|)", replayDto.ServerName);
        }
Exemplo n.º 9
0
        static void Main(string[] args)
        {
            //Create logging level switch to allow for logger level to be changed to what is inside config, after logger initialization
            LoggingLevelSwitch lls = new LoggingLevelSwitch();

            //Initialize logger
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.ControlledBy(lls)
                         .WriteTo.Console()
                         .WriteTo.File("logs/logfile.log", rollingInterval: RollingInterval.Day)
                         .CreateLogger();

            Log.Debug("Starting up");
            Log.Debug("Shutting down");

            //Load config file
            ConfigLoader cfgLoader = new ConfigLoader();
            Config       cfg       = cfgLoader.Load();

            //Change logger depth to that stated in config
            lls.MinimumLevel = cfg.LogDepth;

            Database dm = DatabaseParser.Parse(cfg.DatabasePath);

            string file = "";

            while (!File.Exists(file))
            {
                Log.Information("Drag and drop the replay file, or input the file path: ");
                file = Console.ReadLine();

                if (!File.Exists(file))
                {
                    Log.Error("File not found.");
                }
            }

            Replay r = ReplayParser.Parse(file);
        }
Exemplo n.º 10
0
        public static void Normalize(TextReader input, TextWriter output)
        {
            using (var writer = new JsonTextWriter(output)
            {
                CloseOutput = false
            })
            {
                var parser = new ReplayParser(input);

                while (!parser.IsEof)
                {
                    if (parser.IsArray())
                    {
                        writer.WriteStartArray();
                        parser.Down();
                    }
                    else if (!parser.HasMoreElements)
                    {
                        writer.WriteEndArray();
                        parser.Up();
                    }
                    else if (parser.IsNumber())
                    {
                        writer.WriteValue(parser.ReadDouble());
                    }
                    else if (parser.IsString())
                    {
                        writer.WriteValue(parser.ReadString());
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }
                }
                writer.Flush();
            }
        }
Exemplo n.º 11
0
        public static async Task CheckPlayback(ILogger logger)
        {
            while (true)
            {
                // No temp.rec
                if (!File.Exists(Constants.TempRecPath))
                {
                    Thread.Sleep(30000);
                    continue;
                }

                // File is in use
                bool isOpened = FileHelper.IsOpened(Constants.TempRecPath);
                if (isOpened)
                {
                    Thread.Sleep(30000);
                    continue;
                }

                bool isWarningsOpened = true;
                while (isWarningsOpened)
                {
                    isWarningsOpened = FileHelper.IsOpened(Path.Combine(Constants.SoulstormInstallPath, "warnings.log"));
                    Thread.Sleep(5000);
                }

                bool?isCurrentFileDueToPlayback = FileHelper.IsCurrentFilePlayback();
                if (isCurrentFileDueToPlayback == true || isCurrentFileDueToPlayback == null)
                {
                    Thread.Sleep(30000);
                    continue;
                }

                // Couldn't parse rec file
                RelicChunkyData replayData = ReplayParser.Fetch(Constants.TempRecPath);
                if (replayData == null)
                {
                    Thread.Sleep(60000);
                    continue;
                }

                // Not a dowpro game
                if (replayData.ModName != "dowpro" && replayData.ModName != "dowprotest")
                {
                    Thread.Sleep(60000);
                    continue;
                }

                string modVersion    = FileHelper.GetVersion(replayData.ModName);
                string savedFileName = $"{replayData.MapName}_{DateTime.UtcNow.ToString("MMddyyyy-HHmmss")}.rec";
                string savedFilePath = Path.Combine(Constants.PlayBackPath, savedFileName);
                FileHelper.CopyRelicChunkyFile(Constants.TempRecPath, savedFilePath, replayData);

                // Already saved
                if (FileHelper.IsAlreadySaved(Constants.PlayBackPath, savedFileName))
                {
                    File.Delete(savedFilePath);
                    Thread.Sleep(30000);
                    continue;
                }

                string resultFilePath = Path.Combine(
                    Constants.SoulstormInstallPath,
                    "Profiles",
                    FileHelper.GetPlayerProfile(),
                    "testStats.Lua");

                GameResult result = LuaParser.ParseGameResult(resultFilePath);
                result.ModVersion = modVersion;
                result.ModName    = replayData.ModName;

                string playerName = FileHelper.GetPlayerName();

                // verify if we should send

                // only winners send results
                // only 1vs1 are sent
                // only player vs player
                // 3.30 minutes duration minimum
                string discardedGameReason = string.Empty;
                if (result == null)
                {
                    discardedGameReason = "Lua game result was null.";
                }
                else
                {
                    if (result.TeamsCount != 2 || result.PlayersCount != 2 || result.Players.Count != 2)
                    {
                        discardedGameReason = "Game was not a 1vs1.";
                    }
                    if (string.IsNullOrEmpty(result.WinCondition))
                    {
                        discardedGameReason = "Game had no win condition.";
                    }
                    if (!result.Players
                        .Where(el => el.Name == playerName)
                        .Where(el => el.IsHuman)
                        .Where(el => el.IsAmongWinners)
                        .Any())
                    {
                        discardedGameReason = "Only winners send game results.";
                    }
                    if (!result.Players.All(el => el.IsHuman))
                    {
                        discardedGameReason = "Game was vs A.I.";
                    }
                    if (result.Duration < 210)
                    {
                        discardedGameReason = "Game duration was below 3.30 minutes.";
                    }
                }

                if (string.IsNullOrEmpty(discardedGameReason))
                {
                    // should prob check if result and replay match

                    string jsonPath = Path.Combine(Constants.SoulstormInstallPath, "ReplaysWatcher", "result.json");
                    FileHelper.SaveAsJson(jsonPath, result);

                    string archivePath = Path.Combine(Constants.SoulstormInstallPath, "ReplaysWatcher", "arc.zip");

                    FileHelper.DeleteIfExists(archivePath);

                    ArchiveHelper.CreateZipFile(archivePath, new List <string>()
                    {
                        savedFilePath,
                        jsonPath
                    });

                    string unsentLadderFileName = $"{replayData.MapName}_{DateTime.UtcNow.ToString("MMddyyyy-HHmmss")}.ladder";
                    string unsentLadderFilePath = Path.Combine(Constants.SoulstormInstallPath, "Playback", "Unsent Ladder Games", unsentLadderFileName);
                    CryptoHelper.EncryptFile(
                        archivePath,
                        unsentLadderFilePath);

                    byte[] archiveData = File.ReadAllBytes(archivePath);
                    // Send
                    string uploadResult = await DoWproLadderApi.SendResult(archiveData);

                    if (uploadResult == "Added" ||
                        uploadResult.StartsWith("Unable to unzip ") ||
                        uploadResult.StartsWith("Unable to locate replay file for ") ||
                        uploadResult.StartsWith("Unable to compute file hash for") ||
                        uploadResult.EndsWith("Already exists in db store") ||
                        uploadResult.StartsWith("Unable to parse game result for") ||
                        uploadResult.StartsWith("Results did not match for") ||
                        uploadResult.StartsWith("Invalid players count for")
                        )
                    {
                        File.Delete(unsentLadderFilePath);
                    }

                    logger.WriteEntry($"{DateTime.Now} - {savedFileName} : {uploadResult}");

                    FileHelper.DeleteIfExists(archivePath);
                    FileHelper.DeleteIfExists(jsonPath);
                }
                else
                {
                    logger.WriteEntry($"{DateTime.Now} - {savedFileName} : {discardedGameReason}");
                    Thread.Sleep(30000);
                }
            }
        }
Exemplo n.º 12
0
        public void Test()
        {
            var replay = ReplayParser.FromTextReader(TestDataReader.GetInputFile("Power_3.log.txt"));

            ReplaySerializer.Serialize(replay, "r3.xml");
        }