Консольный чат(сервер+ клиент).
- 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