protected virtual void OnAddedArgs(AddedArgumentEventArgs e) { AddedArgs?.Invoke(this, e); }
private CommandResult UsingRegex() { CommandResult data = new CommandResult(); #region Flags verb ex pattern "--verbose --zomby --deadmatch" { #region Fetch for matches string pattern = @"--\w+"; MatchCollection matches = Regex.Matches(Raw, pattern); data.Flags = matches.Cast <Match>().Select(match => match.Value).ToList(); #endregion #region TriggerEvent foreach (string flag in data.Flags) { AddedFlagsEventArgs addedFlagsEvents = new AddedFlagsEventArgs { Flag = flag }; OnAddedFlags(addedFlagsEvents); } #endregion #region Cleaning Raw Raw = Regex.Replace(Raw, pattern, ""); // deleting pattern just fetched Raw = Regex.Replace(Raw, @" \s*", " "); // deleting multispaces this.Raw = this.Raw.Trim(); // deleting single space from start or end #endregion } #endregion #region Property verb ex pattern "-p driver=steave -p age=30" { #region Fetch for matches string pattern = @"-p (\w+)=(\w+)"; MatchCollection matches = Regex.Matches(Raw, pattern); #endregion #region raitement + Parsing values + Trigger Events foreach (Match match in matches) { var name = match.Groups[1].Value; var value = match.Groups[2].Value; object newValue = DetectType(value); data.Properties.Add(name, newValue); #region TriggerEvent AddedPropertyEventArgs addedPropertiesEvents = new AddedPropertyEventArgs { Property = new KeyValuePair <string, object>(name, newValue) }; OnAddedProperties(addedPropertiesEvents); #endregion } #endregion #region Cleaning Raw Raw = Regex.Replace(Raw, pattern, ""); // deleting pattern just fetched Raw = Regex.Replace(Raw, @" \s*", " "); // deleting multispaces this.Raw = this.Raw.Trim(); // deleting single space from start or end #endregion } #endregion #region Collection verb ex pattern "-c players=steave|john|clark -c ages=21|15|30" { #region Fetch for matches string pattern = @"-c (\w\S+)=(\w\S+)\|?(\w\S+)?"; MatchCollection matches = Regex.Matches(Raw, pattern); #endregion #region Traitement + Parsing values + Trigger Events foreach (Match match in matches) { var name = match.Groups[1].Value; object[] values = new object[match.Groups[2].Value.Split('|').Length]; string[] oldValues = match.Groups[2].Value.Split('|'); for (int v = 0; v < oldValues.Length; v++) { object newValue = DetectType(oldValues[v]); values[v] = newValue; } data.Collections.Add(name, values); #region TriggerEvent AddedCollectionEventArgs addedCollectionsEvents = new AddedCollectionEventArgs { Collections = new KeyValuePair <string, object[]>(name, values) }; OnAddedCollections(addedCollectionsEvents); #endregion } #endregion #region Cleaning Raw Raw = Regex.Replace(Raw, pattern, ""); // deleting pattern just fetched Raw = Regex.Replace(Raw, @" \s*", " "); // deleting multispaces this.Raw = this.Raw.Trim(); // deleting single space from start or end #endregion } #endregion #region ExCollection verb ex pattern "-xc players=steave:21|john:15|clark:30 -xc adresses=Japan:Tokyo|USA:Washington" { #region Fetch for matches string pattern = @"-xc (\w\S+)=(\w\S+:\w\S+[\|\w\S+:\w\S])?"; MatchCollection matches = Regex.Matches(Raw, pattern); #endregion #region Traitement + Parsing values + Trigger Events foreach (Match match in matches) { List <KeyValuePair <string, object> > l = new List <KeyValuePair <string, object> >(); var name = match.Groups[1].Value; string[] rawValues = match.Groups[2].Value.Split('|'); foreach (string values in rawValues) { string[] subValues = values.Split(':'); if (subValues.Length == 2) { string key = subValues[0]; object newValue = DetectType(subValues[1]); KeyValuePair <string, object> value = new KeyValuePair <string, object>(key, newValue); l.Add(value); } } data.ExCollections.Add(name, l); #region TriggerEvent AddedExCollectionEventArgs addedExCollectionsEvents = new AddedExCollectionEventArgs(); addedExCollectionsEvents.ExCollections = new KeyValuePair <string, List <KeyValuePair <string, object> > >(name, l); OnAddedExCollections(addedExCollectionsEvents); #endregion } #endregion #region Cleaning Raw Raw = Regex.Replace(Raw, pattern, ""); // deleting pattern just fetched Raw = Regex.Replace(Raw, @" \s*", " "); // deleting multispaces this.Raw = this.Raw.Trim(); // deleting single space from start or end #endregion } #endregion // Args should be last thing to fetch #region Args verb ex "5 3,5 true james" { if (!string.IsNullOrEmpty(Raw)) { string[] args = Raw.Split(' '); for (int i = 0; i < args.Length; i++) { // double check if it's not a verb just escape matching in the previouse code // if no one of the known verbs is found then it's an Arg if (args[i] != "--" && args[i] != "-p" && args[i] != "-c" && args[i] != "-xc") { // Args, ex "james 5 3,5 true" object detectedType = DetectType(args[i]); if (detectedType == null) { detectedType = args[i]; } object newValue = Convert.ChangeType(args[i], detectedType.GetType(), CultureInfo.GetCultureInfo("en-US")); data.Args.Add(newValue); #region TriggerEvent AddedArgumentEventArgs aELPArgsEvents = new AddedArgumentEventArgs { Arg = newValue }; OnAddedArgs(aELPArgsEvents); #endregion } } } } #endregion return(data); }
private CommandResult WithoutRegex() { CommandResult data = new CommandResult(); data.Clear(); string[] args = Raw.Split(' '); for (int i = 0; i < args.Length; i++) { // define actual verb // if no one of the known verbs is found then it's an Arg if (!args[i].StartsWith("--", StringComparison.OrdinalIgnoreCase) && args[i] != "-p" && args[i] != "-c" && args[i] != "-xc") { // Args, ex "start 17 3,5 true T" as string, int, float, bool and char object detectedType = DetectType(args[i]); if (detectedType == null) { detectedType = args[i]; } object newValue = Convert.ChangeType(args[i], detectedType.GetType(), CultureInfo.GetCultureInfo("en-US")); data.Args.Add(newValue); #region TriggerEvent AddedArgumentEventArgs addedArgsEvent = new AddedArgumentEventArgs { Arg = newValue }; OnAddedArgs(addedArgsEvent); #endregion } else { // check if next argument exist otherwize no need to associate a null value if (args.Length == i + 1) { break; } if (args[i].StartsWith("--", StringComparison.OrdinalIgnoreCase)) { // Flags, ex "--verbose" string flag = args[i]; data.Flags.Add(flag); #region TriggerEvent AddedFlagsEventArgs addedFlagEvent = new AddedFlagsEventArgs { Flag = flag }; OnAddedFlags(addedFlagEvent); #endregion #region Skip next argument if (args.Length == i) { break; } #endregion } else if (args[i] == "-p") { // Properties, ex "-p driver=steave" string[] prop = args[i + 1].Split('='); if (prop.Length == 2) { string name = prop[0]; string value = prop[1]; object newValue = DetectType(value); data.Properties.Add(name, newValue); #region TriggerEvent AddedPropertyEventArgs addedPropertyEvent = new AddedPropertyEventArgs(); addedPropertyEvent.Property = new KeyValuePair <string, object>(name, newValue); OnAddedProperties(addedPropertyEvent); #endregion } #region Skip next argument i++; if (args.Length == i + 1) { break; } #endregion } else if (args[i] == "-c") { // Properties, ex "-c players=steave|john|clark" string[] col = args[i + 1].Split('='); if (col.Length == 2) { string name = col[0]; object[] values = new object[col[1].Split('|').Length]; string[] oldValues = col[1].Split('|'); for (int v = 0; v < oldValues.Length; v++) { object newValue = DetectType(oldValues[v]); values[v] = newValue; } data.Collections.Add(name, values); #region TriggerEvent AddedCollectionEventArgs addedCollectionEvent = new AddedCollectionEventArgs(); addedCollectionEvent.Collections = new KeyValuePair <string, object[]>(name, values); OnAddedCollections(addedCollectionEvent); #endregion } #region Skip next argument i++; if (args.Length == i + 1) { break; } #endregion } else if (args[i] == "-xc") { // Extanded Collection, ex "-xc players=steave:21|john:15|clark:30" string[] col = args[i + 1].Split('='); if (col.Length == 2) { List <KeyValuePair <string, object> > l = new List <KeyValuePair <string, object> >(); string name = col[0]; string[] rawValues = col[1].Split('|'); foreach (string values in rawValues) { string[] subValues = values.Split(':'); if (subValues.Length == 2) { string key = subValues[0]; object newValue = DetectType(subValues[1]); KeyValuePair <string, object> value = new KeyValuePair <string, object>(key, newValue); l.Add(value); } } data.ExCollections.Add(name, l); #region TriggerEvent AddedExCollectionEventArgs addedExCollectionEvent = new AddedExCollectionEventArgs(); addedExCollectionEvent.ExCollections = new KeyValuePair <string, List <KeyValuePair <string, object> > >(name, l); OnAddedExCollections(addedExCollectionEvent); #endregion } #region Skip next argument i++; if (args.Length == i + 1) { break; } #endregion } } } return(data); }