Beispiel #1
0
        private static (Task task, FmShell.Shell shell) StartShell(ServerConfiguration serverConfig, ServerInfo serverInfo, ServerController serverController, RadioCastServer radioCastServer)
        {
            LOGGER.Info("Starting Shell...");
            var shell     = new FmShell.Shell(new ShellMethods(serverInfo, serverController, radioCastServer), serverConfig.ConsolePrompt, "FindFM", ConsoleColor.Black, ConsoleColor.Green);
            var shellTask = new Task(() => shell.Start());

            shellTask.Start();
            return(shellTask, shell);
        }
Beispiel #2
0
        private static async Task AwaitTermination(Task shellTask, FmShell.Shell shell, Task hostTask, IWebHost host, Task radioFeeder)
        {
            Task.WaitAny(shellTask, hostTask, radioFeeder);

            if (shellTask.IsCompleted)
            {
                LOGGER.Info("Shell has been shutdown. Shutting down the Host as well. Timeout: 1 minute");
                var beforeStop = DateTime.Now;
                await host.StopAsync(TimeSpan.FromMinutes(1));

                var afterStop = DateTime.Now;
                LOGGER.Info("Host has been stopped. Time taken: {}", afterStop - beforeStop);
                if (shellTask.Exception?.InnerExceptions?.Count > 0)
                {
                    throw shellTask.Exception;
                }
            }
            else if (hostTask.IsCompleted)
            {
                LOGGER.Info("Host has been shutdown. Shutting down the Shell as well.");
                shell.Stop();
                LOGGER.Info("Shell has been stopped.");
                if (hostTask.Exception?.InnerExceptions?.Count > 0)
                {
                    throw hostTask.Exception;
                }
            }
            else if (radioFeeder.IsCompleted)
            {
                LOGGER.Info("Radio has been shutdown. Shutting down server and shell as well.");
                await host.StopAsync(TimeSpan.FromMinutes(1));

                shell.Stop();
                if (radioFeeder.Exception?.InnerExceptions?.Count > 0)
                {
                    throw radioFeeder.Exception;
                }
            }
        }