예제 #1
0
        private void ProcessArgs(string[] args, ShellManager shellManager)
        {
            using var parser = new Parser((settings) =>
            {
                settings.CaseInsensitiveEnumValues = true;
                settings.HelpWriter = null;
            });

            if (shellManager.Depth == 0)
            {
                var result = parser.ParseArguments <RegisterOptions, ExitOptions>(args);

                result.MapResult(
                    (RegisterOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Register(options);
                    }).GetAwaiter().GetResult());
                },
                    (ExitOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Exit(options);
                    }).GetAwaiter().GetResult());
                },
                    errors =>
                {
                    var helpText       = HelpText.AutoBuild(result);
                    helpText.Copyright = "Copyright (C) 2020 Frozen Mountain Software Ltd.";
                    helpText.AddEnumValuesToHelpText = true;
                    Console.Error.Write(helpText);
                    return(1);
                });
            }
            else if (shellManager.Depth == 1)
            {
                var result = parser.ParseArguments <UnregisterOptions, JoinOptions, ExitOptions>(args);

                result.MapResult(
                    (UnregisterOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Unregister(options);
                    }).GetAwaiter().GetResult());
                },
                    (JoinOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Join(options);
                    }).GetAwaiter().GetResult());
                },
                    (ExitOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Exit(options);
                    }).GetAwaiter().GetResult());
                },
                    errors =>
                {
                    var helpText       = HelpText.AutoBuild(result);
                    helpText.Copyright = "Copyright (C) 2020 Frozen Mountain Software Ltd.";
                    helpText.AddEnumValuesToHelpText = true;
                    Console.Error.Write(helpText);
                    return(1);
                });
            }
            else if (shellManager.Depth == 2)
            {
                var result = parser.ParseArguments <LeaveOptions, ClientsOptions, ConnectionsOptions, ExitOptions>(args);

                result.MapResult(
                    (LeaveOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Leave(options);
                    }).GetAwaiter().GetResult());
                },
                    (ClientsOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Clients(options);
                    }).GetAwaiter().GetResult());
                },
                    (ConnectionsOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Connections(options);
                    }).GetAwaiter().GetResult());
                },
                    (ExitOptions options) =>
                {
                    return(Task.Run(async() =>
                    {
                        return await shellManager.Exit(options);
                    }).GetAwaiter().GetResult());
                },
                    errors =>
                {
                    var helpText       = HelpText.AutoBuild(result);
                    helpText.Copyright = "Copyright (C) 2020 Frozen Mountain Software Ltd.";
                    helpText.AddEnumValuesToHelpText = true;
                    Console.Error.Write(helpText);
                    return(1);
                });
            }
        }