public MinerOption(MinerOptionType iType, string iShortName, string iLongName, string iDefault, MinerOptionFlagType iFlagType, string iSeparator) { this.Type = iType; this.ShortName = iShortName; this.LongName = iLongName; this.Default = iDefault; this.FlagType = iFlagType; this.Separator = iSeparator; }
private static string Parse(List <MiningPair> MiningPairs, List <MinerOption> options, bool useIfDefaults = true, List <MinerOption> ignoreLogOpions = null) { const string IGNORE_PARAM = "Cannot parse \"{0}\", not supported, set to ignore, or wrong extra launch parameter settings"; List <MinerOptionType> optionsOrder = new List <MinerOptionType>(); Dictionary <string, Dictionary <MinerOptionType, string> > cdevOptions = new Dictionary <string, Dictionary <MinerOptionType, string> >(); Dictionary <MinerOptionType, bool> isOptionDefaults = new Dictionary <MinerOptionType, bool>(); Dictionary <MinerOptionType, bool> isOptionExist = new Dictionary <MinerOptionType, bool>(); // init devs options, and defaults foreach (var pair in MiningPairs) { var defaults = new Dictionary <MinerOptionType, string>(); foreach (var option in options) { defaults[option.Type] = option.Default; } cdevOptions[pair.Device.UUID] = defaults; } // init order and params flags, and params list foreach (var option in options) { MinerOptionType optionType = option.Type; optionsOrder.Add(optionType); isOptionDefaults[optionType] = true; isOptionExist[optionType] = false; } // parse foreach (var pair in MiningPairs) { LogParser(String.Format("ExtraLaunch params \"{0}\" for device UUID {1}", pair.CurrentExtraLaunchParameters, pair.Device.UUID)); var parameters = pair.CurrentExtraLaunchParameters.Replace("=", "= ").Split(' '); IgnorePrintLogInit(); MinerOptionType currentFlag = MinerOptionType_NONE; foreach (var param in parameters) { if (param.Equals("")) // skip { continue; } else if (currentFlag == MinerOptionType_NONE) { bool isIngored = true; foreach (var option in options) { if (param.Equals(option.ShortName) || param.Equals(option.LongName)) { isIngored = false; if (option.FlagType == MinerOptionFlagType.Uni) { isOptionExist[option.Type] = true; cdevOptions[pair.Device.UUID][option.Type] = "notNull"; // if Uni param is null it is not present } else // Sinlge and Multi param { currentFlag = option.Type; } } } if (isIngored) // ignored { IgnorePrintLog(param, IGNORE_PARAM, ignoreLogOpions); } } else if (currentFlag != MinerOptionType_NONE) { isOptionExist[currentFlag] = true; cdevOptions[pair.Device.UUID][currentFlag] = param; currentFlag = MinerOptionType_NONE; } else // problem { IgnorePrintLog(param, IGNORE_PARAM, ignoreLogOpions); } } } string retVal = ""; // check if is all defaults bool isAllDefault = true; foreach (var pair in MiningPairs) { foreach (var option in options) { if (option.Default != cdevOptions[pair.Device.UUID][option.Type]) { isAllDefault = false; isOptionDefaults[option.Type] = false; } } } if (!isAllDefault || useIfDefaults) { foreach (var option in options) { if (!isOptionDefaults[option.Type] || isOptionExist[option.Type] || useIfDefaults) // if options all default ignore { if (option.FlagType == MinerOptionFlagType.Uni) { // uni params if one exist use or all must exist? bool isOptionInUse = false; foreach (var pair in MiningPairs) { if (cdevOptions[pair.Device.UUID][option.Type] != null) { isOptionInUse = true; break; } } if (isOptionInUse) { retVal += String.Format(" {0}", option.LongName); } } else if (option.FlagType == MinerOptionFlagType.MultiParam) { List <string> values = new List <string>(); foreach (var pair in MiningPairs) { values.Add(cdevOptions[pair.Device.UUID][option.Type]); } string MASK = " {0} {1}"; if (option.LongName.Contains("=")) { MASK = " {0}{1}"; } retVal += String.Format(MASK, option.LongName, String.Join(option.Separator, values)); } else if (option.FlagType == MinerOptionFlagType.SingleParam) { HashSet <string> values = new HashSet <string>(); foreach (var pair in MiningPairs) { values.Add(cdevOptions[pair.Device.UUID][option.Type]); } string setValue = option.Default; if (values.Count >= 1) { // Always take first setValue = values.First(); } string MASK = " {0} {1}"; if (option.LongName.Contains("=")) { MASK = " {0}{1}"; } retVal += String.Format(MASK, option.LongName, setValue); } else if (option.FlagType == MinerOptionFlagType.DuplicateMultiParam) { List <string> values = new List <string>(); string MASK = " {0} {1}"; foreach (var pair in MiningPairs) { values.Add(String.Format(MASK, option.LongName, cdevOptions[pair.Device.UUID][option.Type])); } retVal += " " + String.Join(" ", values); } } } } LogParser(String.Format("Final extra launch params parse \"{0}\"", retVal)); return(retVal); }
private static string Parse(List <ComputeDevice> CDevs, List <MinerOption> options, bool useIfDefaults = false, List <MinerOption> ignoreLogOpions = null) { const string IGNORE_PARAM = "Cannot parse \"{0}\", not supported, set to ignore, or wrong extra launch parameter settings"; List <MinerOptionType> optionsOrder = new List <MinerOptionType>(); Dictionary <MinerOptionType, string> paramsFlags = new Dictionary <MinerOptionType, string>(); Dictionary <string, Dictionary <MinerOptionType, string> > cdevOptions = new Dictionary <string, Dictionary <MinerOptionType, string> >(); Dictionary <MinerOptionType, bool> isOptionDefaults = new Dictionary <MinerOptionType, bool>(); Dictionary <MinerOptionType, bool> isOptionExist = new Dictionary <MinerOptionType, bool>(); // init devs options, and defaults foreach (var cDev in CDevs) { var defaults = new Dictionary <MinerOptionType, string>(); foreach (var option in options) { defaults.Add(option.Type, option.Default); } cdevOptions.Add(cDev.UUID, defaults); } // init order and params flags, and params list foreach (var option in options) { MinerOptionType optionType = option.Type; optionsOrder.Add(optionType); paramsFlags.Add(optionType, option.LongName); isOptionDefaults.Add(option.Type, true); isOptionExist.Add(option.Type, false); } // parse foreach (var cDev in CDevs) { LogParser(String.Format("ExtraLaunch params \"{0}\" for device UUID {1}", cDev.CurrentExtraLaunchParameters, cDev.UUID)); var parameters = cDev.CurrentExtraLaunchParameters.Replace("=", "= ").Split(' '); bool prevHasIgnoreParam = false; int logCount = 0; Func <string, string> ignorePrintLog = (string param) => { // AMD temp controll is separated and logs stuff that is ignored bool printIgnore = true; if (ignoreLogOpions != null) { foreach (var ignoreOption in ignoreLogOpions) { if (param.Equals(ignoreOption.ShortName) || param.Equals(ignoreOption.LongName)) { printIgnore = false; prevHasIgnoreParam = true; logCount = 0; break; } } } if (printIgnore && !prevHasIgnoreParam) { LogParser(String.Format(IGNORE_PARAM, param)); } if (logCount == 1) { prevHasIgnoreParam = false; logCount = 0; } ++logCount; return(""); // fake crappy C# crap }; MinerOptionType currentFlag = MinerOptionType.NONE; foreach (var param in parameters) { if (param.Equals("")) // skip { continue; } else if (currentFlag == MinerOptionType.NONE) { bool isIngored = true; foreach (var option in options) { if (param.Equals(option.ShortName) || param.Equals(option.LongName)) { isIngored = false; if (option.FlagType == MinerOptionFlagType.Uni) { isOptionExist[option.Type] = true; cdevOptions[cDev.UUID][option.Type] = "notNull"; // if Uni param is null it is not present } else // Sinlge and Multi param { currentFlag = option.Type; } } } if (isIngored) // ignored { ignorePrintLog(param); } } else if (currentFlag != MinerOptionType.NONE) { isOptionExist[currentFlag] = true; cdevOptions[cDev.UUID][currentFlag] = param; currentFlag = MinerOptionType.NONE; } else // problem { ignorePrintLog(param); } } } string retVal = ""; // check if is all defaults bool isAllDefault = true; foreach (var cDev in CDevs) { foreach (var option in options) { if (option.Default != cdevOptions[cDev.UUID][option.Type]) { isAllDefault = false; isOptionDefaults[option.Type] = false; } } } if (!isAllDefault || useIfDefaults) { foreach (var option in options) { if (!isOptionDefaults[option.Type] || isOptionExist[option.Type] || useIfDefaults) // if options all default ignore { if (option.FlagType == MinerOptionFlagType.Uni) { // uni params if one exist use or all must exist? bool isOptionInUse = false; foreach (var cDev in CDevs) { if (cdevOptions[cDev.UUID][option.Type] != null) { isOptionInUse = true; break; } } if (isOptionInUse) { retVal += String.Format(" {0}", option.LongName); } } else if (option.FlagType == MinerOptionFlagType.MultiParam) { List <string> values = new List <string>(); foreach (var cDev in CDevs) { values.Add(cdevOptions[cDev.UUID][option.Type]); } string MASK = " {0} {1}"; if (option.LongName.Contains('=')) { MASK = " {0}{1}"; } retVal += String.Format(MASK, option.LongName, string.Join(option.Separator, values)); } else if (option.FlagType == MinerOptionFlagType.SingleParam) { HashSet <string> values = new HashSet <string>(); foreach (var cDev in CDevs) { values.Add(cdevOptions[cDev.UUID][option.Type]); } string setValue = option.Default; if (values.Count == 1) { setValue = values.First(); } string MASK = " {0} {1}"; if (option.LongName.Contains('=')) { MASK = " {0}{1}"; } retVal += String.Format(MASK, option.LongName, setValue); } } } } LogParser(String.Format("Final extra launch params parse \"{0}\"", retVal)); return(retVal); }