2.7 KiB
Пример выполнения лабораторной работы №3
Задание
Написать систему мгновенного обмена сообщениями между несколькими пользователями. В проекте должна присутствовать возможность сохранения состояния в формат, поддерживающий валидацию по схеме. Валидация должна производиться либо в программе при импорте данных, либо в юнит-тестах, проверяющих корректность сохранения состояния.
Описание реализации
Между клиентом и сервером происходит обмен JSON сообщениями вида (класс datatypes.Message
):
{"senderId":"AD60","receiverId":"C399","body":"hello", "timestamp":"2020-09-11T08:54:45.528807100Z"}
senderId
- идентификатор отправителя,receiverId
- идентификатор получателя,body
- текстовое сообщение,timestamp
- время создания сообщения.
При подключении клиент должен отправить JSON сообщение со своим именем (класс datatypes.ClientInfo
):
{"timestamp":"2020-09-11T08:49:44.644320700Z", "login":"0FB9"}
При получении и отправлении сообщения на сервере производится сохранение поля timestamp
в JSON файл (класс datatypes.ClientState
)
в заранее созданную папку states_path
, указанную при старте сервера в качестве аргумента. Пример сохранённого состояния пользователя
0FB9 в файле 0FB9.json:
{"lastMessageTimestamp":"2020-09-11T08:49:44.644320700Z"}
Для данной структуры разработана JSON схема resources/schemas/v0.0.1/ClientStateSchema.json
. Проверка соответствия
сохраняемого состояния схеме производится юнит тестом SchemaCompliance.checkClientStateSchemeCompliance
.
Инструкция запуска
Тестовый запуск можно произвести из среды разработки или из консоли при наличии в системе утилиты sbt https://www.scala-sbt.org/.
sbt "runMain client.Server --host 192.168.0.2 --port 10000 --states_path ./client_states"
sbt "runMain client.Client --host 192.168.0.2 --port 10000"