public CommandSet ReadCommandsFromFile(string filepath) { try { if (!File.Exists(filepath)) { return(null); } SettingsCollection settings = null; try { settings = (new SettingsFileLoader()).ReadSettingsFile(filepath); } catch (Exception exc) { log.WriteError("Exception reading commands from file '{0}': {1}", filepath, exc); //return new CommandSet(new List<Command>(), new DateTime()); return(null); } string fileVersion = SettingHelpers.GetSingleStringValue(settings, "FileVersion"); if (!fileVersion.StartsWith(MASTER_FILE_VERSION_COMPAT)) { log.WriteError( "Incompatible command file, version: {0}", fileVersion); return(null); } DateTime timestamp = settings.GetValue("Timestamp").GetUtcDateParam("TimeUtc"); if (DateTime.UtcNow - timestamp > TimeSpan.FromHours(1)) { log.WriteInfo( "Ignoring command file older than one hour, timestamp={0:O}", timestamp); return(null); } DateTime acknowledgement = SettingHelpers.GetSingleDateTimeValue(settings, "AcknowledgementUtc"); int ncmds = SettingHelpers.GetSingleIntValue(settings, "CommandCount"); List <Command> cmdlist = new List <Command>(ncmds); for (int i = 0; i < ncmds; ++i) { string key = string.Format("Command{0}", i + 1); var cmdData = settings.GetValue(key); DateTime time = cmdData.GetDateParam("TimeStampUtc"); string cmdString = cmdData.GetStringParam("CommandString"); var cmd = new Command(time, cmdString); cmdlist.Add(cmd); } CommandSet cmdset = new CommandSet(cmdlist, acknowledgement); return(cmdset); } catch (Exception exc) { log.WriteError("Exception reading command file: {0}", exc); return(null); } }