change exit mode
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
"profiles": {
|
||||
"f-cln": {
|
||||
"commandName": "Project",
|
||||
"commandLineArgs": "--port 3113 -i 172.22.176.1"
|
||||
"commandLineArgs": "-p 1771"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<RootNamespace>f_cln</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
@@ -81,25 +81,33 @@ namespace f_srv
|
||||
// Запускаем сервер в отдельной задаче
|
||||
var serverTask = Task.Run(() => StartServer(ip, port, _cancellationTokenSource.Token));
|
||||
|
||||
// Ожидаем нажатие клавиши с явной обработкой
|
||||
Console.WriteLine("Сервер запущен. Нажмите любую клавишу для остановки...");
|
||||
Console.WriteLine("Сервер запущен. Введите 'Exit' для остановки...");
|
||||
|
||||
// Ждем нажатия клавиши в отдельном потоке
|
||||
var keyTask = Task.Run(() =>
|
||||
// Ждем ввод строки "Exit" в отдельном потоке
|
||||
var exitTask = Task.Run(() =>
|
||||
{
|
||||
while (!_cancellationTokenSource.IsCancellationRequested)
|
||||
{
|
||||
var input = Console.ReadLine();
|
||||
if (!string.IsNullOrEmpty(input) &&
|
||||
input.Trim().Equals("Exit", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Console.ReadKey(true); // true - не отображать нажатую клавишу
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// Ожидаем либо нажатия клавиши, либо завершения сервера
|
||||
await Task.WhenAny(serverTask, keyTask);
|
||||
// Ожидаем либо ввод "Exit", либо завершение сервера
|
||||
var completedTask = await Task.WhenAny(serverTask, exitTask);
|
||||
|
||||
if (completedTask == exitTask && exitTask.Result)
|
||||
{
|
||||
// Пользователь ввел Exit
|
||||
if (!_cancellationTokenSource.IsCancellationRequested)
|
||||
{
|
||||
// Отправляем сигнал отмены
|
||||
Console.WriteLine("Остановка сервера...");
|
||||
_cancellationTokenSource.Cancel();
|
||||
|
||||
// Останавливаем listener
|
||||
_listener?.Stop();
|
||||
|
||||
// Даем серверу время на корректное завершение
|
||||
@@ -114,6 +122,16 @@ namespace f_srv
|
||||
|
||||
Console.WriteLine("Сервер остановлен.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Сервер завершился сам (ошибка или другая причина)
|
||||
if (!_cancellationTokenSource.IsCancellationRequested)
|
||||
{
|
||||
_cancellationTokenSource.Cancel();
|
||||
}
|
||||
Console.WriteLine("Сервер завершил работу.");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user