Skip to content
This repository was archived by the owner on Jun 20, 2025. It is now read-only.
/ sc_chat Public archive

Тестовое задание: Реализовать простой консольный chat на Erlang (клиент+сервер)

Notifications You must be signed in to change notification settings

dontlosecontrol/sc_chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

SC Chat - Консольный чат на Erlang

Консольный чат(сервер+ клиент).

Архитектура

Серверная часть:

  • 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 - сообщение от другого пользователя

Пример работы с Netcat

  1. Запустить сервер (если он еще не запущен): В корневой директории проекта:

    rebar3 shell

    В Erlang-оболочке:

    application:start(sc_chat).
  2. Подключится к серверу с netcat в новом терминале:

    nc localhost 8080
  3. Аутентифкация. Введите команду AUTH: с именем пользователя и паролем (AUTH:admin:admin AUTH:user1:pass1 ):

    AUTH:admin:admin
    

    Сервер должен ответить:

    OK
    

    Если аутентификация не удалась:

    ERROR:auth_error
    
  4. Отправка сообщений. После успешной аутентификации можно отправлять сообщения, команда SEND::

    SEND:Возьмите Эрлангистом XD
    

    Сервер должен ответить:

    OK
    
  5. Получение сообщений. Если другой клиент (NetCat,Telnet, клиент из папки Client) отправит сообщение, мы увидим его в netcat терминале:

    MESSAGE:user1:Welcome to the club buddy
    

About

Тестовое задание: Реализовать простой консольный chat на Erlang (клиент+сервер)

Resources

Stars

Watchers

Forks

Languages