/
f1rment2
/
lab8
Обзор
Документация
Войти
/
f1rment2
/
lab8
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Main.java
99 строк
5 KB
Ilya
First commit: P2P Voice Chat with Multicast and Codec
02 июн 2026, 00:00
02 июн 2026, 00:00
ecd9191
Код
Авторство
О чём код?
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("=== НАСТРОЙКА P2P УЗЛА ==="); System.out.print("Введите ваш Никнейм: "); String nick = scanner.nextLine(); System.out.print("Введите базовый порт для этого экземпляра (например, 5000): "); int basePort = scanner.nextInt(); int tcpPort = basePort; int udpPort = basePort + 1; // Авто-согласование: UDP-порт всегда равен TCP + 1 AudioEngine audioEngine = new AudioEngine(udpPort); // Инициализация сетевых сервисов new Thread(new TcpServer(tcpPort, audioEngine)).start(); LanDiscovery discovery = new LanDiscovery(nick, tcpPort); discovery.start(); System.out.println("\n[Система] Узел успешно запущен! Ожидание подключений..."); while (true) { System.out.println("\n================ МЕНЮ УПРАВЛЕНИЯ ================"); System.out.println("1. Список обнаруженных пользователей (Multicast Discovery)"); System.out.println("2. Прямой вызов по IP и Порту (Задача №1)"); System.out.println("3. Вызов по никнейму из списка (Задача №2)"); System.out.println("4. Положить трубку (Отправить CALL_END)"); System.out.printf("5. Переключить кодек [Сейчас: %s]%n", audioEngine.isCompressionEnabled() ? "8-бит Сжатие" : "16-бит Без сжатия"); System.out.println("6. Выход из программы"); System.out.print("Выберите опцию: "); int choice = scanner.nextInt(); scanner.nextLine(); // Очистка буфера switch (choice) { case 1: System.out.println("\n--- Пользователи в локальной сети ---"); if (discovery.onlineUsers.isEmpty()) { System.out.println("(Локальная сеть пуста)"); } else { discovery.onlineUsers.forEach((name, addr) -> System.out.println(" • " + name + " -> Ссылка: " + addr)); } break; case 2: System.out.print("Введите IP-адрес собеседника: "); String manualIp = scanner.nextLine(); System.out.print("Введите TCP-порт собеседника: "); int manualPort = scanner.nextInt(); System.out.println("[Вызов] Соединение..."); TcpClient.sendCommand(manualIp, manualPort, "CALL_START:" + nick + ":" + udpPort); audioEngine.startAudio(manualIp, manualPort + 1); break; case 3: System.out.print("Введите никнейм цели: "); String targetNick = scanner.nextLine(); String address = discovery.onlineUsers.get(targetNick); if (address != null) { String[] parts = address.split(":"); String targetIp = parts[0]; int targetTcpPort = Integer.parseInt(parts[1]); System.out.println("[Вызов] Инициализация P2P соединения с " + targetNick); TcpClient.sendCommand(targetIp, targetTcpPort, "CALL_START:" + nick + ":" + udpPort); audioEngine.startAudio(targetIp, targetTcpPort + 1); } else { System.out.println("[Ошибка] Пользователь '" + targetNick + "' отсутствует или ушел в оффлайн."); } break; case 4: System.out.print("Введите IP собеседника для отправки сброса: "); String resetIp = scanner.nextLine(); System.out.print("Введите TCP Порт собеседника: "); int resetPort = scanner.nextInt(); TcpClient.sendCommand(resetIp, resetPort, "CALL_END"); audioEngine.stopAudio(); break; case 5: audioEngine.setCompression(!audioEngine.isCompressionEnabled()); break; case 6: System.out.println("Завершение работы узла."); System.exit(0); break; default: System.out.println("Неверный пункт меню."); } } } }