private static void DoThings() { //Create directories if they do not exist Directory.CreateDirectory("./log"); Directory.CreateDirectory("./post/posted"); Directory.CreateDirectory("./post/topost"); //Provide feedback // - Start of script Program.writeLog("Starting program"); //Toolbox stores working information for the program as well as utility methods used by the main Toolbox magicBox = new Toolbox(); //ConfStore object stores the configuration file ConfStore cStore = new ConfStore(); //Read the file and store the data readConf(cStore, magicBox); //Generate the MD5 and store the MD5 createHashFile(createHash()); magicBox.setHash(); //Create the inital SQL connection // -By now the toolbox and configuration settings store is populated with data magicBox.connectSql(); //update the last checkin time magicBox.updateLastCheckin(); //Set up TimeSpan variables to store intervals the program will use for checking in TimeSpan sqlInterval = TimeSpan.FromMilliseconds(magicBox.getSqlInterval()); TimeSpan rebootInterval = TimeSpan.FromMilliseconds(magicBox.getRebootDelay()); delayWait(rebootInterval); //Clear the CSV file to start with a clean slate magicBox.clearCsv(); //Execute programs to run at startup magicBox.runStart(); //Verify integrity of the CSV files magicBox.checkCsv(); //Upload the CSVs magicBox.uploadCsv(); /* Every x minutes based on config file check in to the SQL server */ //Spawn a thread for SQL check in timer sqlTimer = new System.Threading.Timer((e) => { //magicBox.updateLastCheckin(); Console.WriteLine("SQL tick on " + DateTime.Now); // Check if a connection exists if (magicBox.checkConnection()) { //Update the last check in time magicBox.updateLastCheckin(); createHashFile(createHash()); bool blnCheck = true; try { //TODO: KILL THE NEW LINE //Check if Configured Reboot Time is the same between the SQL and the configuration file blnCheck = magicBox.checkRt(cStore); //if it isn't then rewrite the configuration file so it's Configured Reboot Time matches the SQL if (!blnCheck) { //look for [configured reboot times] tag index int intLength = cStore.getLength(); for (int i = 0; i < intLength; i++) { //if(cStore.getTag().Equals("[configured reboot times]")) if (String.Compare(cStore.getTag()[i], "[configured reboot times]") == 0) { Chunk cTemp = cStore.getTemp(); cStore.setChunk(cTemp, i); cStore.writeConf(); Program.writeLog("Updated Configured Reboot Time"); } } } } catch (Exception) { } //Verify the integrity of the MD5 and update it if (!magicBox.compareHashWithSql()) { //TODO: Change this so it just reads based off of chunks //readConf(cStore, magicBox); magicBox.updateConfInSql(cStore); } //Check for CSVs that haven't been uploaded and upload them magicBox.checkPostQueue(); } else { Program.writeLog("Connection to SQL lost"); } }, null, TimeSpan.Zero, sqlInterval); //Spawn a thread for checking if it's time to reboot rebootTimer = new System.Threading.Timer((f) => { Program.writeLog("Reboot tick on " + DateTime.Now); DateTime happening = magicBox.getConfiguredRebootTime(); TimeSpan interval = TimeSpan.FromMilliseconds(magicBox.getRebootInterval()); while (magicBox.getLastRebootTime() >= happening) { happening += interval; } if (DateTime.Now >= happening) { if (magicBox.checkRebootTime()) { Program.writeLog("Last reboot time is " + magicBox.getLastRebootTime()); Program.writeLog("Reboot interval is " + magicBox.getRebootInterval()); magicBox.runReb(); } } }, null, TimeSpan.Zero, rebootInterval); //This while loop exists to keep the timer threads from dying prematurely due to the end of the main program //while (true) { } }
//========================================= //Read the Conf.cfg file //Chunks refers to each field in the file. //========================================= private static void readConf(ConfStore i_cs, Toolbox tIn) { //Check if file exists if (!File.Exists(Program.confUrl)) { Program.writeLog("Conf file is missing"); Program.exit(1); } StreamReader sr = new StreamReader(Program.confUrl, System.Text.Encoding.Default); string line = ""; List <string> currentList = new List <string>(); int currentChunk = 0; //Read until end of file while ((line = sr.ReadLine()) != null) { //Ensure the line is not empty before adding the line int the list that will form part of the settings chunk if (line != "") { //Add the line to the chunk currentList.Add(line); //System.Console.WriteLine(line); } else { //Make sure that the currentList is not empty if (currentList.Count != 0) { //Add the chunk to the settings chunk chunks.Add(new Chunk(currentList)); currentList = new List <string>(); currentChunk++; } } } //Close the reader sr.Close(); //Grab the final chunk that the loop did not grab if (currentList.Count != 0) { chunks.Add(new Chunk(currentList)); } //External is a list of strings which will store the [Last Reboot Time] settings tag in a chunk List <string> external = new List <string>(); if (!File.Exists("./lastreboottime.txt")) { //The [Last Reboot Time] tag exists in a seperate file // - Create that file if it does not exist // - Could be merged into configuration file but that adds more complexity StreamWriter writer = new StreamWriter("./lastreboottime.txt", false); writer.WriteLine("[Last Reboot Time]"); PerformanceCounter uptime = new PerformanceCounter("System", "System Up Time"); uptime.NextValue(); TimeSpan t = TimeSpan.FromSeconds(uptime.NextValue()); DateTime final = DateTime.Now.Subtract(t); //System.Console.WriteLine(final); //tools.setLastReboot(final); writer.WriteLine(final); writer.Close(); } // StreamReader sr_b = new StreamReader("./lastreboottime.txt"); external.Add(sr_b.ReadLine()); external.Add(sr_b.ReadLine()); sr_b.Close(); //Send chunks to functions here Toolbox tb = tIn; ConfStore cStore = i_cs; foreach (Chunk c in chunks) { ParserChain ts = new ParserChain(c.getChunk(), tb, cStore); } ParserChain tc = new ParserChain(external, tb, cStore); //Debugging lines //string strTest = tb.ToString(); //System.Console.WriteLine(tb.checkSql()); //System.Console.WriteLine(startupChunk[1]); //Process.Start(startupChunk[1]); //ParserChain ts = new ParserChain(chunks[0].getChunk(), new Toolbox()); }