public void CleanUp() { GetJSONParser().StopParser(); ptask = null; GameState = null; GC.Collect(); GC.WaitForPendingFinalizers(); }
/// <summary> /// Read a demo json file if the corresponding replay file was already parsed /// </summary> /// <param name="jsonpath"></param> /// <param name="ptask"></param> public static EncounterDetection ReadDemoJSON(string jsonpath, ParseTaskSettings ptask) { Console.WriteLine("Reading: " + jsonpath + " for Encounter Detection"); using (var reader = new StreamReader(jsonpath)) { var deserializedGamestate = JsonConvert.DeserializeObject <ReplayGamestate>(reader.ReadToEnd(), ptask.Settings); Console.WriteLine("Map: " + deserializedGamestate.Meta.Mapname); if (deserializedGamestate == null) { throw new Exception("Gamestate null"); } string metapath = META_PATH + deserializedGamestate.Meta.Mapname + ".txt"; var mapmeta = MapMetaDataPropertyReader.ReadProperties(metapath); mapmeta.Mapname = deserializedGamestate.Meta.Mapname; Console.WriteLine(mapmeta); Console.WriteLine("Detecting Encounters"); return(new EncounterDetection(deserializedGamestate, mapmeta, new CSGOPreprocessor())); } }
/// <summary> /// Just parses a demo file from the current game with a given parsetasksetting and creates a json. /// </summary> /// <param name="demopath"></param> public static void ParseDemoFile(string demopath, ParseTaskSettings ptask) { Console.WriteLine("Reading: " + Path.GetFileName(demopath)); try { var jsonpath = demopath.Replace(".dem", ".json"); if (File.Exists(jsonpath)) { Console.WriteLine(".dem file already parsed"); } else { using (var demoparser = new DemoParser(File.OpenRead(demopath))) { Generator = new CSGOGameStateGenerator(demoparser, ptask); SkipFile = CheckForSkip(); if (!SkipFile) { Console.WriteLine("Parsing .dem file"); Generator.GenerateJSONFile(); Generator.CleanUp(); } else { Console.WriteLine("----- Not supported. Skip file: " + demopath + "-----"); return; } } } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); Console.WriteLine("----- Error occured. Skip file: " + demopath + "-----"); return; } Console.WriteLine("----- Parsing demo to GamestateJSON was sucessful ----- "); }
/// <summary> /// Returns a string of the serialized gamestate object /// </summary> public string GenerateJSONString(DemoParser newdemoparser, ParseTaskSettings newtask) { InitializeGenerator(); GenerateGamestate(); // Fills variable gs with gamestateobject string gsstr = ""; try { gsstr = GetJSONParser().DumpJSONString(GameState, newtask.usepretty); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); Console.ReadLine(); } PrintWatch(); CleanUp(); return(gsstr); }
/// <summary> /// Constructor - Create a new CSGO Generator to generate a new Gamestate /// </summary> /// <param name="newdemoparser"></param> /// <param name="parsetask"></param> public AOE2HDGameStateGenerator(DemoParser newdemoparser, ParseTaskSettings parsetask) : base(parsetask) { Aoe2hdparser = newdemoparser; //Parser to transform DemoParser events to JSON format Jsonparser = new AOE2HDJSONParser(parsetask.DestPath, parsetask.Settings); }
/// <summary> /// Read a supported replay file or parse if a demo file is given /// </summary> /// <param name="demopath"></param> private static EncounterDetectionReplay ReadGamestateJSONFile(string demopath, ParseTaskSettings ptask) { Console.WriteLine("Reading: " + Path.GetFileName(demopath)); try { var jsonpath = demopath.Replace(".dem", ".json"); if (File.Exists(jsonpath) || Path.GetExtension(demopath) != ".json") { if (new FileInfo(jsonpath).Length == 0) { Console.WriteLine("----- File empty -----"); return(null); //File was empty -> skipped parsing it but wrote json } Console.WriteLine("----- .dem file already parsed -----"); Console.WriteLine("----- Reading: " + jsonpath + " for Encounter Detection -----"); using (var reader = new StreamReader(jsonpath)) { var deserializedGamestate = JsonConvert.DeserializeObject <ReplayGamestate>(reader.ReadToEnd(), ptask.Settings); Console.WriteLine("Map: " + deserializedGamestate.Meta.Mapname); if (deserializedGamestate == null) { throw new Exception("Gamestate null"); } string metapath = META_PATH + deserializedGamestate.Meta.Mapname + ".txt"; var mapmeta = MapMetaDataPropertyReader.ReadProperties(metapath); Console.WriteLine("Detecting Encounters"); Console.WriteLine("----- Reading GamestateJSON was sucessful ----- "); return(new EncounterDetection(deserializedGamestate, mapmeta, new CSGOPreprocessor()).DetectEncounters()); } } else { Console.WriteLine("----- File not existent or right format: " + demopath + "-----"); return(null); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); Console.WriteLine("----- Error occured. Skip file: " + demopath + "-----"); return(null); } }
/// <summary> /// Base constructor for any generator /// </summary> /// <param name="newtask"></param> public GameStateGenerator(ParseTaskSettings newtask) { ptask = newtask; }
/// <summary> /// Constructor - Create a new CSGO Generator to generate a new Gamestate /// </summary> /// <param name="newdemoparser"></param> /// <param name="parsetask"></param> public CSGOGameStateGenerator(DemoParser newdemoparser, ParseTaskSettings parsetask) : base(parsetask) { Csgoparser = newdemoparser; //Parser to transform DemoParser events to JSON format Jsonparser = new CSGOJSONParser(parsetask.DestPath, parsetask.Settings); }