private static void RunUserInteractiveSession() { bool quit = false; // Create Command Line parser ColoredConsole.WriteUserInstructions("HELP: 'help' to list commands. 'help <command>' to get a help for specific command."); // var parser = new CommandLine.Parser(with => with.HelpWriter = null); var parser = CommandLine.Parser.Default; do { try { PauseFor(); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Gray; ColoredConsole.WriteUserPrompt("Enter a command: "); var commandLineArray = Console.ReadLine().Split(CommandSeparator); parser.ParseArguments <CommandParser.StartMovieOptions, CommandParser.StopMovieOptions, CommandParser.QuitOptions>(commandLineArray) .MapResult( (CommandParser.StartMovieOptions options) => { return(MoviePlaybackSystemHelper.StartPlayingMovie(new PlayMovieMessage(options.MovieTitle, options.UserId))); }, (CommandParser.StopMovieOptions options) => { return(MoviePlaybackSystemHelper.StopPlayingMovie(new StopMovieMessage(options.UserId))); }, (CommandParser.QuitOptions options) => { quit = true; return(0); }, errs => { return(1); } ); } catch (Exception ex) { ColoredConsole.WriteError($"Exception occurred (type: '{ex.GetType().Name}')"); ColoredConsole.WriteError(ex.Message); ColoredConsole.WriteError(ex.StackTrace); } } while (quit == false); }