# TyChat-Client TUI Минимальный консольный клиент, используемый разработчиками для тестирования протокола AcoustiOverSocket. ## Зависимости и запуск Приложение автоматически проверяет и устанавливает необходимые библиотеки при первом запуске (`prompt_toolkit`, `numpy`, `sounddevice`, `python-socketio`). ```bash python client.py ``` ## Управление * **Tab** — Переключение фокуса между списком чатов (левая панель) и полем ввода сообщения (нижняя панель). * **Стрелки Вверх / Вниз** — Навигация по списку контактов (работает, когда фокус находится на панели чатов). При перемещении выбор чата переключается автоматически. * **Ctrl + C** или ввод `/exit` — Корректное завершение работы и выход из терминала. ## Команды в поле ввода * `/help` — Открывает официальную Wiki проекта в браузере по умолчанию. * `/add ` — Локально добавляет новый UIN в список контактов. * `/alert <сообщение>` — Отправляет сообщение с флагом приоритетного внимания (выставляет статус `[!]` у получателя). * `s/что_заменить/на_что_заменить` — Замена текста в последнем отправленном сообщении (аналог синтаксиса `sed`). --- # Преимущества * **Автономность и локальное хранение:** Вся история сообщений и список контактов сохраняются на стороне клиента в файле `settings.json`. Сервер выполняет исключительно роль ретранслятора пакетов. * **Адаптивный TUI-интерфейс:** Благодаря использованию контейнеров `Frame` из библиотеки `prompt_toolkit`, интерфейс автоматически масштабируется под любые размеры окна терминала без сдвигов и искажения разметки. * **Поддержка отложенной доставки (Preserved):** Если целевой контакт находится в офлайне, клиент кэширует исходящие сообщения локально и автоматически отправляет их, как только протокол зафиксирует появление пользователя в сети. # Недостатки * **Отсутствие серверной истории:** Поскольку сервер не логирует пакеты, получить пропущенные за время офлайна сообщения невозможно, если у отправителя в этот момент был закрыт клиент. * **Акустическая нагрузка:** Специфика протокола передачи данных подразумевает генерацию высокочастотных аудиосигналов через системное устройство вывода, что требует ручного контроля уровня громкости. * **Отсутствие ввода с мышки:** Навигация полностью переведена на клавиатурные хоткеи ради стабильности работы интерфейса в специфических и эмулируемых терминальных средах.