예제 #1
0
 public void Dispatch(string input)
 {
     // Skip blank lines.
     if (string.IsNullOrWhiteSpace(input))
         return;
     // Split into tokens by whitespace.
     var tokens = input.Split();
     // Command name is first token.
     ICommand command;
     if (!commandRegistry.TryGetCommand(tokens[0], out command))
     {
         output.WriteLine(Purpose.Error, "Unrecognized command \"{0}\".", tokens[0]);
         return;
     }
     // Feed args to command.
     var context = new LoadParamsContext(tokens, 1, tokens.Length - 1);
     command.LoadParams(context);
     if (context.Failed)
     {
         output.WriteLine(
             Purpose.Error,
             "Invalid args \"{0}\" for command \"{1}\"",
             input,
             command.Usage);
         using (output.Indent())
         {
             foreach (var error in context.Errors)
                 output.WriteLine(Purpose.Error, "- {0}", error);
         }
         return;
     }
     // Execute.
     messageBoard.Send(command);
 }
예제 #2
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 protected static void OptionalResourceName(LoadParamsContext context, int index, out string resourceName)
 {
     resourceName = null;
     if (context.TokenCount <= index)
         return;
     if (string.IsNullOrWhiteSpace(context[index]))
         context.ReportError("Resource name cannot be empty.");
     else
         resourceName = context[index];
 }
예제 #3
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 protected static void OptionalProcessName(LoadParamsContext context, int index, out string processName, bool singleCharNamesOnly = true)
 {
     processName = null;
     if (context.TokenCount <= index)
         return;
     if (string.IsNullOrWhiteSpace(context[index]))
         context.ReportError("Process name cannot be empty.");
     else if (singleCharNamesOnly && new StringInfo(context[index]).LengthInTextElements > 1)
         context.ReportError("Process name can be at most 1 character.");
     else
         processName = context[index];
 }
예제 #4
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 protected static void RequiredCount(LoadParamsContext context, int index, out int count)
 {
     if (context.TokenCount <= index)
         count = 1; // Default value if not provided instead of error.
     else if (!int.TryParse(context[index], NumberStyles.None, CultureInfo.InvariantCulture, out count))
         context.ReportError("Failed to parse count as an integer value.");
     else if (count < 1)
         context.ReportError("Count cannot be less than 1.");
 }
예제 #5
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 public abstract void LoadParams(LoadParamsContext context);
예제 #6
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 public override void LoadParams(LoadParamsContext context)
 {
 }
예제 #7
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 public override void LoadParams(LoadParamsContext context)
 {
     OptionalResourceName(context, 0, out resourceName);
 }
예제 #8
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 public override void LoadParams(LoadParamsContext context)
 {
     OptionalProcessName(context, 0, out processName, false);
 }
예제 #9
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 public override void LoadParams(LoadParamsContext context)
 {
     RequiredResourceName(context, 0, out resourceName);
     RequiredCount(context, 1, out count);
 }
예제 #10
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 public override void LoadParams(LoadParamsContext context)
 {
     RequiredProcessName(context, 0, out processName);
 }
예제 #11
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 protected static void RequiredResourceName(LoadParamsContext context, int index, out string resourceName)
 {
     resourceName = null;
     if (context.TokenCount <= index)
         context.ReportError("No argument provided for resource name.");
     else if (string.IsNullOrWhiteSpace(context[index]))
         context.ReportError("Resource name cannot be empty.");
     else
         resourceName = context[index];
 }
예제 #12
0
파일: Commands.cs 프로젝트: EkardNT/CS143B
 protected static void RequiredPriority(LoadParamsContext context, int index, out int priority)
 {
     priority = 0;
     if (context.TokenCount <= index)
         context.ReportError("No argument provided for priority.");
     else if (!int.TryParse(context[index], NumberStyles.None, CultureInfo.InvariantCulture, out priority))
         context.ReportError("Failed to parse priority as an integer value.");
     else if (priority != 1 && priority != 2)
         context.ReportError("Invalid priority, must be 1 or 2.");
 }