##Программа содержит 3 основных пакета
- client хранит в себе сущность клиента и класс, отвечающий за чтение данных, вводимых клиентом
- server хранит в себе сам сервер
- sharedResources хранит в себе вспомогательные классы (считыватели настроек и т д)и файлы
-
Класс Connection-класс обертка над Socket, который хранит в себе Socket,ObjectOutputStream и ObjectInputStream. Он стерилизует все отправляемые сообщения (Message) в ObjectOutputStream. и при необходимости может их десериализовать. Так же класс поддерживает интерфейс Closable для автоматического ого закрытия всех потоков. Структура класса:
-
Класс Logger - Класс предназначен для логирования информации и от сервера, и от клиентов, в один файл, который будет создать автоматически при запуске программы. Так же елси файл уже был создан ранее, при новом запуске программы, данные в файле буду сброшены. Это сделано для того, чтобы не писать в один файл результаты работы двух программ. Также Logger дублирует и информацию в консоль. Структура класса:![Logger](https://user-images.githubusercontent.com/65041919/187931999-bf33bcd2-618d-4af3-8d32-a0ca2672a6e9.png
-
Класс Message-Класс предназначенный для создания обёртки над отправлемыемими сообщениями. Содержит в себе тип сообщения MessageType и сам текст сообщения. Поддерживает сериализацию и десериализацию Структура класса:
-
Enum MessageType- специальное перечисление,которое позволяет определить тип отправленных/полученных сообщения от сервера и от клиента.
-
Класс SettingReader-специальный класс, предназначенный для чтения из файла настроек данных для ServerSocket и для Socket. Структура класса:
-
Класс Server-Класс в котором реализована основная логика Сервера. Данный класс отвечает за корректную работу сервера, подключение и обслуживание клиентов. Все клиенты обслуживаются в отдельных потоках,и хранятся в специальной мапе , которая не позволяет соаздть двух клиентов с одинаковым именем. Структура класса:
-
Класс Client-Класс предоставляющий клиента. Данный класс создает и подключает клиента к нашему серверу ,используя настройки в файле sharedResources/serverSettings.property. Все клиенты создаются в отдельных потоках.За это отвечает внутренний класс SocketThread Структура класса:
-
Класс ClientTextReader -чтобы не создавать все время поток для чтения сообщений клиентами, был создан этот отдельный класс, который просто инициализирует Scanner для чтения пользовательских вводов с консоли Структура класса: