From 9711fb04ce2f95ebac42b7f929bccebb547a58b6 Mon Sep 17 00:00:00 2001 From: 100yo Date: Sat, 21 Dec 2024 08:27:29 +0200 Subject: [PATCH] Add Lab 10 assignment --- 11-network-ii/lab/README.md | 247 ++++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 11-network-ii/lab/README.md diff --git a/11-network-ii/lab/README.md b/11-network-ii/lab/README.md new file mode 100644 index 00000000..80bd73b7 --- /dev/null +++ b/11-network-ii/lab/README.md @@ -0,0 +1,247 @@ +# Poll System 📊 + +Тази седмица ще създадем малка система за провеждане на анкети. + +За целта ще използваме популярната [клиент-сървър](https://en.wikipedia.org/wiki/Client%E2%80%93server_model) архитектура, в която сървърът ще управлява анкетите и гласовете за всяка анкета, +а редица клиенти ще могат да взаимодействат със сървъра, за да създават анкети, да гласуват и да преглеждат резултатите. + +## Poll System Server + +- Сървърът трябва да обслужва **множество** клиенти едновременно. +- Всеки клиент изпраща команди към сървъра, а сървърът изпълнява командите и връща резултат към клиента. + +Имплементирайте следния конструктор: +`public PollServer(int port, PollRepository pollRepository)` + +Както и следните методи: +`public void start()` - стартира сървъра на зададения в конструктора порт +`public void stop()` - спира сървъра и зачиства ресурсите + +## Poll System Client + +- Клиентът трябва да може да изпраща заявки към сървъра. +- Всяка заявка представлява команда, която се изпълнява на сървъра, в следствие на което се връща отговор. +- Потребителите могат да прекратят връзката си към сървъра по всяко време. + +## Команди + +### create-poll + +Можем да създадем анкета, като зададем въпрос и списък от отговори чрез следната команда: + +``` +create-poll [... ] +``` + +Изисквания и ограничения: +- Всеки въпрос трябва да има минимум два отговора. +- За конкретна анкета можем да имаме само един въпрос, но неограничен брой отговори. +- Първоначално всеки отговор трябва да има 0 гласа. + +> ⚠️ **Забележка** ⚠️ +> За да не се налага да пишем къдрави регулярни изрази предпразнично, ще приемем, че въпросът и отговорите НЯМА да съдържат интервали. +> Интервал между думите във въпрос/отговор ще бъде заменен с тире. + +Пример: + +``` +create-poll What-is-your-favourite-xmas-movie? Home-Alone Die-Hard Elf The-Grinch +``` + +Примерен отговор на сървъра при успешно създаване на анкета: + +```json +{"status":"OK","message":"Poll 1 created successfully."} +``` + +### list-polls + +Можем да прегледаме всички създадени анкети чрез следната команда: + +``` +list-polls +``` + +Примерен отговор на сървъра: + +```json +{"status":"OK","polls":{"1":{"question":"What-is-your-favourite-xmas-movie?","options":{"The-Grinch":0,"Home-Alone":0,"Die-Hard":0,"Elf":0}}}} +``` + +Ако няма създадени анкети, отговорът на сървъра ще бъде: + +```json +{"status":"ERROR","message":"No active polls available."} +``` + +### submit-vote + +Можем да гласуваме неограничено за отговор на дадена анкета чрез следната команда: + +``` +submit-vote