/
latin
/
WialonIPSServer
Обзор
Документация
Войти
/
latin
/
WialonIPSServer
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Program.cs
86 строк
3 KB
latin
web server
26 ноя 2025, 16:36
26 ноя 2025, 16:36
f31093b
Код
Авторство
О чём код?
namespace WialonIPSServer; class Program { private static WialonTcpServer? _tcpServer; private static WialonUdpServer? _udpServer; private static WebServer? _webServer; private static CancellationTokenSource? _cancellationTokenSource; private static LogService? _logService; static async Task Main(string[] args) { Console.WriteLine("=== Wialon IPS Server v2.0 ==="); Console.WriteLine("Сервер для приема и обработки данных по протоколу Wialon IPS"); Console.WriteLine(); // Порт по умолчанию int tcpPort = 20163; // Стандартный порт для Wialon IPS int udpPort = 20163; int webPort = 80; // Веб-сервер на порту 80 // Парсим аргументы командной строки if (args.Length > 0 && int.TryParse(args[0], out int port)) { tcpPort = port; udpPort = port; } if (args.Length > 1 && int.TryParse(args[1], out int udpPortArg)) { udpPort = udpPortArg; } if (args.Length > 2 && int.TryParse(args[2], out int webPortArg)) { webPort = webPortArg; } _cancellationTokenSource = new CancellationTokenSource(); _logService = new LogService(); // Запускаем веб-сервер _webServer = new WebServer(_logService, webPort); var webTask = _webServer.StartAsync(_cancellationTokenSource.Token); // Запускаем TCP сервер _tcpServer = new WialonTcpServer(tcpPort, _logService); var tcpTask = _tcpServer.StartAsync(_cancellationTokenSource.Token); // Запускаем UDP сервер _udpServer = new WialonUdpServer(udpPort, _logService); var udpTask = _udpServer.StartAsync(_cancellationTokenSource.Token); Console.WriteLine($"TCP сервер слушает порт: {tcpPort}"); Console.WriteLine($"UDP сервер слушает порт: {udpPort}"); Console.WriteLine($"Веб-сервер слушает порт: {webPort}"); Console.WriteLine($"Веб-интерфейс доступен по адресу: http://localhost:{webPort}"); Console.WriteLine("Нажмите Ctrl+C для остановки сервера"); Console.WriteLine(); // Обработка Ctrl+C Console.CancelKeyPress += (sender, e) => { e.Cancel = true; Console.WriteLine("\n[INFO] Получен сигнал остановки..."); _cancellationTokenSource.Cancel(); }; try { await Task.WhenAll(webTask, tcpTask, udpTask); } catch (OperationCanceledException) { Console.WriteLine("[INFO] Сервер останавливается..."); } finally { _webServer?.Stop(); _tcpServer?.Stop(); _udpServer?.Stop(); _cancellationTokenSource?.Dispose(); Console.WriteLine("[INFO] Сервер остановлен"); } } }