public void Save(MMgame game, dsreplay replay) { Task.Factory.StartNew(() => { try { var json = JsonConvert.SerializeObject(game, Formatting.Indented); if (!File.Exists(WorkDir + "/games/" + game.ID + "_report.json")) { File.WriteAllText(WorkDir + "/games/" + game.ID + "_report.json", json); } } catch { _logger.LogError("Failed writing report game " + game.ID); } replay.GenHash(); ReplayHash.Add(replay.HASH); try { var json = JsonConvert.SerializeObject(replay, Formatting.Indented); string replay_file = WorkDir + "/games/" + game.ID + "_replay.json"; int i = 1; while (File.Exists(replay_file)) { replay_file = WorkDir + "/games/" + game.ID + "_replay_" + i.ToString() + ".json"; i++; } File.WriteAllText(replay_file, json); } catch { _logger.LogError("Failed writing report replay " + game.ID); } }); }
public async Task <MMgame> Report(dsreplay replay, string id) { MMgame mmgame = new MMgame(); int gid = int.Parse(id); if (Replays.ContainsKey(gid)) { Replays[gid].Add(replay); } else { Replays.TryAdd(gid, new ConcurrentBag <dsreplay>()); Replays[gid].Add(replay); } Save(Games[gid], replay); lock (Games) { if (Games.ContainsKey(gid)) { if (Games[gid].Reported == true) { return(Games[gid]); } } replay.GenHash(); if (ReplayHash.Contains(replay.HASH)) { //return null; } else { ReplayHash.Add(replay.HASH); } List <MMplayer> team1 = new List <MMplayer>(); List <MMplayer> team2 = new List <MMplayer>(); foreach (var pl in replay.PLAYERS) { MMplayer mmpl = new MMplayer(); if (MMplayers.ContainsKey(pl.NAME)) { mmpl = MMplayers[pl.NAME]; } else { mmpl.Name = "Dummy"; } if (pl.TEAM == replay.WINNER) { team1.Add(mmpl); } else { team2.Add(mmpl); } } MMgame repgame = new MMgame(); repgame = MMrating.RateGame(team1, team2); repgame.ID = Games[gid].ID; repgame.Quality = Games[gid].Quality; repgame.Server = Games[gid].Server; repgame.Reported = true; Games[gid] = repgame; } Save(); return(Games[gid]); }
public MMrepository(ILogger <MMrepository> logger) { _logger = logger; if (File.Exists(data_json)) { TextReader reader = new StreamReader(data_json, Encoding.UTF8); string fileContents; while ((fileContents = reader.ReadLine()) != null) { var player = JsonConvert.DeserializeObject <BasePlayer>(fileContents); if (player != null && player.Name != null) { MMplayer pl = new MMplayer(); pl = new MMplayer(player); MMplayers.TryAdd(player.Name, pl); } } reader.Close(); } _logger.LogInformation("Initialized MMplayers with {0} ents.", MMplayers.Count()); foreach (var file in Directory.EnumerateFiles(WorkDir + "/games", "*_found.json")) { var ent = Path.GetFileName(file); Match m = rx_mmid.Match(ent); if (m.Success) { int mmid = int.Parse(m.Groups[1].ToString()); if (mmid > MMID) { MMID = mmid; } } try { var json = JsonConvert.DeserializeObject <MMgame>(File.ReadAllText(file)); Games.TryAdd(json.ID, json); } catch (Exception e) { Console.WriteLine(e.Message); } } _logger.LogInformation("Setting MMID to " + MMID); foreach (var file in Directory.EnumerateFiles(WorkDir + "/games", "*_report.json")) { try { var json = JsonConvert.DeserializeObject <MMgame>(file); Games[json.ID] = json; } catch { } } foreach (var file in Directory.EnumerateFiles(WorkDir + "/games", "*_replay_*.json")) { try { var json = JsonConvert.DeserializeObject <dsreplay>(file); ReplayHash.Add(json.HASH); } catch { } } /** * var options = new JsonSerializerOptions * { * WriteIndented = true * }; * var ladder = System.Text.Json.JsonSerializer.Serialize(laddergames, options); * File.WriteAllText(WorkDir + "/ladder.json", ladder); **/ GetLadder(); QMMplayers.CollectionChanged += QplayersChanged; }