public void Start() { _writer.Write("Listening for commands"); _writer.Write($"To see list of commands type : {ServerCommandList.Help}"); _writer.InjectServerPrefix(); var userInput = DesktopConsole.ReadLine(); ContinueWhenStopped: while (userInput != null && !userInput.Equals(ServerCommandList.StopProgram, StringComparison.OrdinalIgnoreCase)) { try { if (userInput.Equals(ServerCommandList.Help)) { _writer.WriteHelp(); } else { var cmdContext = _reader.Read(userInput); var command = _commandFactory.GetCommand(cmdContext); command.Execute(); var commandId = _commandResults.GetLastCommandId(); var commandResult = _commandResults.GetResult(commandId); _writer.Write(commandResult != null ? $"{commandResult.ToString()}" : $"Executed {commandId.Value}"); } } catch (Exception ex) { _writer.Write(ex.Message); } _writer.InjectServerPrefix(); userInput = DesktopConsole.ReadLine(); } if (userInput != null && userInput.Equals(ServerCommandList.ShutDown, StringComparison.OrdinalIgnoreCase)) { DesktopConsole.WriteLine("Application shutting down..."); return; } ; _writer.InjectServerPrefix(); DesktopConsole.WriteLine("Server is stopped..."); while (!String.IsNullOrEmpty(userInput = DesktopConsole.ReadLine())) { if (userInput.Equals(ServerCommandList.StartProgram, StringComparison.OrdinalIgnoreCase)) { goto ContinueWhenStopped; } } }