public void CleanUp()
 {
     GetJSONParser().StopParser();
     ptask     = null;
     GameState = null;
     GC.Collect();
     GC.WaitForPendingFinalizers();
 }
Beispiel #2
0
        /// <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()));
            }
        }
Beispiel #3
0
        /// <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);
 }
Beispiel #6
0
        /// <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);
 }