You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Vladimir Protsenko 0edb903641 Fixed rep and lab descriptions. 4 years ago
..
project Added third example. 4 years ago
resources/schemas/v0.0.1 Added third example. 4 years ago
src Added third example. 4 years ago
.gitignore Added third example. 4 years ago
README.md Fixed rep and lab descriptions. 4 years ago
build.sbt Corrections in README and build.sbt 4 years ago

README.md

Пример выполнения лабораторной работы №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"