Консольный чат(сервер+ клиент).
- sc_chat_sup - мэйн супервизор
- sc_tcp_listener - TCP listner
- sc_chat_room_sup - супервизор для клиентских обработчиков (simple_one_for_one)
- sc_client_handler - gen_server для обработки каждого клиентского соединения
- sc_user_registry - gen_server для управления пользователями и аутентификацией
- sc_connection_manager - gen_server для отслеживания активных соединений
- sc_message_router - gen_server для рассылки сообщений между клиентами
- Получает и рассылает сообщения от клиентов (исключая отправителя)
- Проверяет аутентификацию при подключении клиента
- Контролирует единственность подключения для каждого пользователя
- Возвращает ошибки:
auth_error- пользователь не найден или неверный парольalready_connected- для данного пользователя уже есть активное соединение- todo:
- Позволяет добавлять пользователей через консоль Erlang
- feat: падение одного клиента не влияет на других
AUTH:username:password\n- аутентификацияSEND:текст_сообщения\n- отправка сообщения
OK\n- успешная операцияERROR:auth_error\n- ошибка аутентификацииERROR:already_connected\n- пользователь уже подключенERROR:auth_required\n- требуется аутентификацияERROR:invalid_command\n- неверная команда
MESSAGE:username:текст\n- сообщение от другого пользователя
-
Запустить сервер (если он еще не запущен): В корневой директории проекта:
rebar3 shell
В Erlang-оболочке:
application:start(sc_chat).
-
Подключится к серверу с netcat в новом терминале:
nc localhost 8080
-
Аутентифкация. Введите команду
AUTH:с именем пользователя и паролем (AUTH:admin:admin AUTH:user1:pass1 ):AUTH:admin:adminСервер должен ответить:
OKЕсли аутентификация не удалась:
ERROR:auth_error -
Отправка сообщений. После успешной аутентификации можно отправлять сообщения, команда
SEND::SEND:Возьмите Эрлангистом XDСервер должен ответить:
OK -
Получение сообщений. Если другой клиент (NetCat,Telnet, клиент из папки Client) отправит сообщение, мы увидим его в netcat терминале:
MESSAGE:user1:Welcome to the club buddy