Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Живий рахунок матчу
1. Початковий рівень. Створити сервер ASP.NET Core SignalR з хабом, через який оператор надсилає рахунок матчу (назви команд і кількість голів), і консольний клієнт, який підключається до хабу, показує кожне оновлення рахунку з часом отримання, а в режимі оператора (аргумент --operator) надсилає введений рядок 2:1.
2. Базовий рівень. Створити сервер SignalR, який веде кілька матчів одночасно (група для кожного матчу), і консольний клієнт: глядач обирає матч зі списку, отримує поточний рахунок одразу після підписки та всі наступні зміни, а оператор вводить рахунок, який перевіряється (цілі числа від 0 до 99, рахунок не зменшується), з повідомленням про помилку від хабу.
3. Високий рівень. Створити систему «Live Score»: сервер SignalR зі строго типізованим хабом, групами матчів, методом хабу, яким оператор оновлює рахунок (команди й голи), і кінцевою точкою REST для створення матчу; клієнт Windows Forms для глядачів з таблицею матчів, що оновлюється в реальному часі, і журналом подій (голи, завершення матчу), автоматичним перепідключенням з повторною підпискою та збереженням журналу у файл.
Варіант 2. Табло аеропорту
1. Початковий рівень. Створити сервер SignalR з фоновою службою BackgroundService, яка кожні 3 с змінює статус випадкового рейсу (за розкладом, посадка, затримано, вилетів) і надсилає його всім клієнтам, та консольний клієнт, що виводить рядки «номер рейсу – статус».
2. Базовий рівень. Створити сервер SignalR, у якому рейси (номер, термінал A, B або C, статус) згруповано за терміналами, а фонова служба кожні 3 с змінює статус випадкового рейсу, і консольний клієнт, який отримує термінал аргументом командного рядка, підписується лише на його рейси й виводить табло у вигляді вирівняної таблиці, перемальованої після кожної зміни.
3. Високий рівень. Створити систему «Табло аеропорту»: сервер SignalR читає розклад із JSON-файлу, фонова служба змінює статуси за часом, диспетчер змінює статус через кінцеву точку REST; клієнт Windows Forms показує табло в DataGridView з фільтром терміналу, позначає затримані рейси й повідомляє про втрату та відновлення зв’язку в рядку стану.
Варіант 3. Групова вікторина
1. Початковий рівень. Створити сервер SignalR, через який ведучий надсилає питання з чотирма варіантами відповіді всім учасникам, і консольний клієнт, який показує питання й надсилає номер відповіді, введений користувачем; сервер повідомляє учасникові, чи правильна відповідь.
2. Базовий рівень. Створити сервер SignalR для вікторини з обмеженням часу, через який ведучий надсилає учасникам питання з чотирма варіантами відповіді: відповіді приймаються 15 с після надсилання питання, повторна відповідь того самого учасника відхиляється HubException, а після завершення часу всі учасники отримують правильну відповідь і таблицю балів; консольний клієнт працює в режимі ведучого або учасника.
3. Високий рівень. Створити систему «Вікторина»: сервер SignalR читає питання з JSON-файлу, ведучий керує раундами з консольного клієнта з параметрами командного рядка (--file, --time, --help), учасники працюють у клієнті Windows Forms з таймером і кнопками відповідей; бали залежать від швидкості відповіді, а підсумковий рейтинг зберігається в CSV-файл.
Варіант 4. Моніторинг датчиків теплиці
1. Початковий рівень. Створити сервер SignalR з потоковим методом хабу, який щосекунди повертає виміряні температуру й вологість (IAsyncEnumerable<T>), і консольний клієнт, що виводить вказану користувачем кількість вимірювань.
2. Базовий рівень. Створити сервер SignalR з фоновою службою, що генерує вимірювання температури й вологості трьох датчиків теплиці, і консольний клієнт, який отримує пороги температури аргументами командного рядка, виводить вимірювання таблицею та позначає рядки, що виходять за пороги, словом ALARM.
3. Високий рівень. Створити систему «Теплиця»: сервер SignalR, фонова служба якого генерує вимірювання температури й вологості датчиків, з групами датчиків, потоковим методом хабу і кінцевою точкою REST для зміни порогів; клієнт Windows Forms з графіком GDI+ останніх 60 вимірювань, списком тривог, кнопкою скасування потоку та записом усіх вимірювань у CSV-файл.
Варіант 5. Аукціон
1. Початковий рівень. Створити сервер SignalR, який приймає ставки на один лот і розсилає всім учасникам нову найвищу ставку з іменем учасника, та консольний клієнт, де користувач вводить ім’я й суми ставок.
2. Базовий рівень. Створити сервер SignalR для аукціону одного лота, який розсилає всім нову найвищу ставку з іменем учасника, відхиляє ставки, не більші за поточну хоча б на мінімальний крок, повідомленням HubException, надсилає новому учаснику поточний стан лота під час підключення і завершує торги через 60 с з повідомленням переможцю (Clients.Client) та всім іншим, і консольний клієнт, де учасник вводить ім’я й суми ставок.
3. Високий рівень. Створити систему «Аукціон»: сервер SignalR з кількома лотами (групи), фоновою службою таймерів лотів і кінцевою точкою REST для додавання лота; клієнт Windows Forms зі списком лотів, історією ставок, зворотним відліком, блокуванням кнопки ставки під час перепідключення та звітом про продані лоти у файлі.
Варіант 6. Спільний список покупок
1. Початковий рівень. Створити сервер SignalR, який зберігає спільний список покупок, і консольний клієнт, де користувач додає товар командою add назва, а всі підключені клієнти отримують оновлений список.
2. Базовий рівень. Створити сервер SignalR для спільного списку покупок з командами додавання, позначення купленим і видалення товару за номером з перевіркою номера; новий клієнт отримує весь список під час підключення, а кожна зміна розсилається всім із зазначенням, хто її виконав; консольний клієнт надсилає команди й виводить список.
3. Високий рівень. Створити застосунок «Список покупок»: сервер SignalR з окремими списками для кожної сім’ї (групи за кодом сім’ї), збереженням списків у JSON-файлі та клієнтом Windows Forms з CheckedListBox, миттєвою синхронізацією змін між кількома вікнами і повторним приєднанням до групи після перепідключення.
Варіант 7. Черга до лікаря
1. Початковий рівень. Створити сервер SignalR, через який лікар викликає наступного пацієнта за номером талона, і консольний клієнт «табло», що виводить повідомлення «Талон N – кабінет M».
2. Базовий рівень. Створити сервер SignalR електронної черги до лікаря з групами кабінетів і консольні клієнти пацієнта, лікаря й табло: пацієнт отримує талон (номер повертає метод хабу), лікар викликає наступного пацієнта свого кабінету, пацієнт отримує особисте повідомлення через Clients.Client, а табло показує останні п’ять викликів.
3. Високий рівень. Створити систему «Електронна черга»: сервер SignalR з реєстрацією талонів через кінцеву точку REST, клієнтом лікаря (консольний, параметри --room, --help) і табло Windows Forms з великим шрифтом, звуковим сигналом під час виклику, статистикою часу очікування та журналом викликів у CSV-файлі.
Варіант 8. Чат підтримки
1. Початковий рівень. Створити сервер SignalR, де клієнт надсилає питання, а всі оператори отримують його з іменем клієнта, та консольний клієнт, який працює в режимі клієнта або оператора залежно від аргументу командного рядка.
2. Базовий рівень. Створити сервер SignalR чату підтримки, у якому звернення клієнтів стають у чергу, оператор забирає наступне звернення, після чого повідомлення клієнта й оператора передаються лише між ними (Clients.Client), а інші оператори бачать, що звернення зайняте; консольний клієнт працює в режимі клієнта або оператора залежно від аргументу командного рядка.
3. Високий рівень. Створити систему «Чат підтримки»: сервер SignalR зі строго типізованим хабом, чергою звернень, передаванням діалогу іншому оператору та збереженням історії діалогів у JSON-файлах; клієнт оператора Windows Forms зі списком діалогів і вкладками розмов.
Варіант 9. Трекер кур’єрів
1. Початковий рівень. Створити сервер SignalR, якому консольний клієнт кур’єра щосекунди надсилає свої координати (зміщуючи їх випадково), і консольний клієнт диспетчера, що виводить ім’я кур’єра та координати.
2. Базовий рівень. Створити сервер SignalR, якому консольний клієнт кур’єра щосекунди надсилає ім’я та координати, а сервер зберігає останні координати кожного кур’єра, надсилає їх новому диспетчеру (консольний клієнт) під час підключення, вилучає кур’єра після відключення (OnDisconnectedAsync) і перевіряє, що координати лежать у межах міста 0–1000.
3. Високий рівень. Створити систему «Трекер кур’єрів»: клієнти кур’єрів щосекунди надсилають серверу SignalR свої координати, сервер має кінцеву точку REST для замовлень і призначає найближчого кур’єра; клієнт диспетчера Windows Forms малює схему міста GDI+ з позиціями й слідами кур’єрів, а звіт про пройдену відстань кожного кур’єра зберігається у файл.
Варіант 10. Спільний редактор нотаток
1. Початковий рівень. Створити сервер SignalR, що зберігає текст нотатки, і консольний клієнт, який показує текст під час підключення та замінює його введеним рядком для всіх учасників.
2. Базовий рівень. Створити сервер SignalR спільного редактора нотатки, що складається з абзаців: учасник блокує абзац для редагування (інші отримують відмову HubException), змінює його текст і розблоковує, а блокування автоматично знімається після відключення учасника; консольний клієнт показує нотатку й надсилає команди.
3. Високий рівень. Створити застосунок «Спільні нотатки»: сервер SignalR з кількома нотатками (групи), збереженням у файлах і журналом змін; клієнт Windows Forms зі списком абзаців, позначенням заблокованих абзаців іменем автора, історією змін і відновленням блокувань після перепідключення.
Варіант 11. Голосування журі
1. Початковий рівень. Створити сервер SignalR, через який члени журі надсилають оцінку від 1 до 10 поточному учаснику конкурсу, і консольний клієнт, що виводить кожну оцінку та поточний середній бал.
2. Базовий рівень. Створити сервер SignalR голосування журі з консольними клієнтами ведучого й членів журі: ведучий оголошує учасника конкурсу, кожен член журі може оцінити його один раз оцінкою від 1 до 10 (повторна оцінка відхиляється), про некоректну оцінку повідомляється помилкою хабу, а після оцінок усіх членів журі всі отримують середній бал без найвищої та найнижчої оцінок.
3. Високий рівень. Створити систему «Журі»: сервер SignalR зі списком учасників конкурсу з JSON-файлу, клієнтом ведучого (консольний з параметрами --file, --help), клієнтами членів журі, що надсилають оцінки від 1 до 10, і клієнтом Windows Forms для глядачів з таблицею результатів, діаграмою GDI+ середніх балів і збереженням протоколу в CSV-файл.
Варіант 12. Шахова партія
1. Початковий рівень. Створити сервер SignalR, який пересилає хід у форматі e2-e4 від одного гравця іншому, і консольний клієнт, що виводить отримані ходи та надсилає введені.
2. Базовий рівень. Створити сервер SignalR шахових партій як груп: двоє перших учасників стають гравцями білими й чорними, інші – глядачами; сервер перевіряє формат ходу e2-e4 й черговість гравців і розсилає ходи всім учасникам групи з номером ходу; консольний клієнт надсилає введені ходи й виводить отримані.
3. Високий рівень. Створити застосунок «Шахи онлайн»: сервер SignalR з лобі партій і збереженням записів партій у файли; клієнт Windows Forms, що малює дошку GDI+, переміщує фігури мишею, показує список ходів і сповіщає про відключення суперника.
Варіант 13. Сповіщення про оцінки
1. Початковий рівень. Створити сервер SignalR з кінцевою точкою REST POST /api/grades, яка приймає ім’я студента, дисципліну й оцінку і надсилає її всім клієнтам хабу, та консольний клієнт, що виводить отримані оцінки.
2. Базовий рівень. Створити сервер SignalR сповіщень про оцінки, у якому студент підключається з консольного клієнта зі своїм іменем у рядку запиту і приєднується до групи з цим іменем, а оцінку (дисципліна, 0–100 балів з перевіркою), надіслану викладачем, отримують лише клієнти цього студента.
3. Високий рівень. Створити систему «Електронний журнал»: сервер SignalR з кінцевими точками REST для виставлення й перегляду оцінок, збереженням у JSON-файлі та групами академічних груп; клієнт студента Windows Forms з таблицею оцінок, середнім балом і сповіщенням у рядку стану про нову оцінку.
Варіант 14. Трансляція курсу валют
1. Початковий рівень. Створити сервер SignalR з фоновою службою, яка щосекунди змінює курси USD, EUR і PLN до гривні, і консольний клієнт, що виводить отримані курси з двома знаками після коми.
2. Базовий рівень. Створити сервер SignalR з фоновою службою, яка щосекунди змінює курси валютних пар (USD/UAH, EUR/UAH, PLN/UAH), і групами пар, та консольний клієнт, який отримує пари аргументами командного рядка, підписується на них, повідомляє про невідому пару й виводить зміни курсу зі знаком і стрілкою напрямку.
3. Високий рівень. Створити систему «Курси валют»: сервер SignalR з фоновою службою, що змінює курси валютних пар, потоковим методом історії курсу за останні N хвилин і кінцевою точкою REST для поточних курсів; клієнт Windows Forms з таблицею курсів, графіком GDI+ обраної пари, підпискою та відпискою й експортом історії в CSV-файл.
Варіант 15. Кухонний дисплей кафе
1. Початковий рівень. Створити сервер SignalR, через який офіціант надсилає замовлення (столик і страви), і консольний клієнт кухні, що виводить нові замовлення з часом надходження.
2. Базовий рівень. Створити сервер SignalR кухонного дисплея кафе з консольними клієнтами офіціанта й кухаря: офіціант надсилає замовлення (столик і страви), кухар змінює його статус (прийнято, готується, готове) за номером замовлення з перевіркою допустимого переходу, а офіціант, що створив замовлення, отримує сповіщення про кожну зміну.
3. Високий рівень. Створити систему «Кухонний дисплей»: сервер SignalR з кінцевою точкою REST для замовлень, групами кухні та бару і збереженням замовлень у JSON-файлі; клієнт Windows Forms з картками замовлень, таймером приготування, виділенням прострочених замовлень і звітом про середній час приготування.
Варіант 16. Онлайн-лічильник відвідувачів
1. Початковий рівень. Створити сервер SignalR, який у OnConnectedAsync і OnDisconnectedAsync рахує підключених клієнтів й надсилає всім їхню кількість, та консольний клієнт, що виводить поточну кількість.
2. Базовий рівень. Створити сервер SignalR для залу місткістю N осіб (задається в конфігурації): турнікет (консольний клієнт) надсилає події входу й виходу, сервер не допускає від’ємної кількості та перевищення місткості, а табло отримує кількість і відсоток заповненості.
3. Високий рівень. Створити систему «Відвідувачі»: сервер SignalR з кількома залами (групи), до якого клієнти-турнікети надсилають події входу й виходу, з кінцевою точкою REST зі статистикою за годинами та збереженням подій у CSV-файлі; клієнт Windows Forms з індикаторами заповненості залів і графіком GDI+ відвідуваності за день.
Варіант 17. Мультиплеєрна «Змійка»
1. Початковий рівень. Створити сервер SignalR з фоновою службою, яка щосекунди переміщує змійку на полі 20 × 20 і надсилає координати голови всім клієнтам, та консольний клієнт, що змінює напрямок руху клавішами W, A, S, D.
2. Базовий рівень. Створити сервер SignalR гри «Змійка» на полі 20 × 20, у якому кожен підключений гравець керує своєю змійкою клавішами W, A, S, D, сервер обробляє зіткнення зі стінами та їжу і розсилає стан поля всім клієнтам 5 разів на секунду, а консольний клієнт малює поле символами.
3. Високий рівень. Створити гру «Змійка онлайн»: сервер SignalR з кімнатами гри (групи), таблицею рекордів у JSON-файлі та зіткненнями між змійками; клієнт Windows Forms, що малює поле GDI+ без мерехтіння, керує змійкою стрілками й показує рейтинг гравців.
Варіант 18. Бронювання місць у кінозалі
1. Початковий рівень. Створити сервер SignalR зі схемою зали 5 × 10, у якій клієнт бронює місце за рядом і номером, і консольний клієнт, що виводить схему зали після кожного бронювання будь-ким.
2. Базовий рівень. Створити сервер SignalR бронювання місць у кінозалі 5 × 10, який тимчасово блокує вибране місце на 30 с, відхиляє бронювання зайнятих чи заблокованих місць повідомленням HubException, знімає блокування після відключення клієнта та розсилає всім зміни стану місць, і консольний клієнт, що виводить схему зали.
3. Високий рівень. Створити систему «Кінозал»: сервер SignalR із сеансами (групи) та збереженням бронювань у JSON-файлі; клієнт Windows Forms зі схемою зали GDI+, де вільні, заблоковані й зайняті місця розрізняються штриховкою, підтвердженням бронювання та друком квитка у файл.
Варіант 19. Дошка задач команди
1. Початковий рівень. Створити сервер SignalR, що зберігає задачі з колонками «To Do», «In Progress», «Done», і консольний клієнт, де користувач переміщує задачу командою move номер колонка, а всі клієнти отримують оновлену дошку.
2. Базовий рівень. Створити сервер SignalR для дошки задач команди з колонками «To Do», «In Progress», «Done»: додавання, переміщення і видалення задач, перевірка номерів і назв колонок, обмеження кількості задач у колонці «In Progress» та повідомлення всім клієнтам, хто і що змінив; консольний клієнт надсилає команди й виводить дошку.
3. Високий рівень. Створити застосунок «Kanban»: сервер SignalR з дошками команд (групи), збереженням у JSON-файлі та кінцевою точкою REST для звіту; клієнт Windows Forms з трьома списками, перетягуванням задач мишею, миттєвою синхронізацією та позначенням задач, які редагує інший учасник.
Варіант 20. Сигналізація розумного будинку
1. Початковий рівень. Створити сервер SignalR, якому консольний клієнт датчика надсилає подію (двері відчинено, рух, дим), і консольний клієнт власника, що виводить подію з назвою кімнати та часом.
2. Базовий рівень. Створити сервер SignalR сигналізації розумного будинку, якому консольний клієнт датчика надсилає події (двері відчинено, рух, дим) з назвою кімнати: тривожні події надсилаються консольному клієнту власника доти, доки він не підтвердить їх методом хабу, режим охорони вмикається й вимикається кодом (неправильний код відхиляється), а в режимі без охорони події руху лише записуються в журнал.
3. Високий рівень. Створити систему «Розумний будинок»: сервер SignalR з кінцевою точкою REST для датчиків, групами будинків і журналом у CSV-файлі; клієнт Windows Forms зі схемою кімнат GDI+, виділенням кімнати з тривогою штриховкою, списком непідтверджених тривог і перепідключенням.
Варіант 21. Лабораторна черга на захист
1. Початковий рівень. Створити сервер SignalR, де студент стає в чергу на захист лабораторної роботи, і консольний клієнт, що виводить оновлену чергу всім після кожної зміни.
2. Базовий рівень. Створити сервер SignalR черги на захист лабораторних робіт з консольними клієнтами студента й викладача: студент може стати в чергу лише один раз і вийти з неї, викладач викликає наступного студента, викликаний студент отримує особисте повідомлення, а студент, що відключився, зберігає місце в черзі 2 хвилини.
3. Високий рівень. Створити систему «Черга на захист»: сервер SignalR з чергами на захист лабораторних робіт для кількох викладачів (групи), консольним клієнтом студента для запису в чергу, клієнтом викладача Windows Forms з кнопками виклику, прийняття й відхилення роботи, статистикою захистів і збереженням результатів у CSV-файлі.
Варіант 22. Прогрес завантаження файлів
1. Початковий рівень. Створити сервер SignalR з потоковим методом хабу, який імітує обробку файлу заданого розміру та повертає відсоток виконання, і консольний клієнт, що виводить прогрес до 100 %.
2. Базовий рівень. Створити сервер SignalR, який приймає від клієнта потік фрагментів тексту (IAsyncEnumerable<string>), рахує рядки й слова, а консольний клієнт читає файл, указаний аргументом командного рядка, надсилає його частинами й виводить результат обробки.
3. Високий рівень. Створити застосунок «Обробка файлів»: клієнт Windows Forms вибирає кілька текстових файлів, надсилає їх серверу SignalR потоками, показує окремий ProgressBar для кожного файлу, дозволяє скасувати обробку, а сервер зберігає статистику обробки в JSON-файлі.
Варіант 23. Кімнати гри «Хрестики-нулики»
1. Початковий рівень. Створити сервер SignalR для однієї партії «хрестики-нулики» на двох гравців і консольний клієнт, що виводить поле 3 × 3 після кожного ходу та надсилає хід номером клітинки 1–9.
2. Базовий рівень. Створити сервер SignalR для партії «хрестики-нулики» на двох гравців, який перевіряє черговість і зайнятість клітинок, визначає перемогу чи нічию, повідомляє результат обом гравцям і пропонує нову партію, а третій гравець отримує відмову; консольний клієнт виводить поле 3 × 3 і надсилає хід номером клітинки 1–9.
3. Високий рівень. Створити гру «Хрестики-нулики онлайн»: сервер SignalR з автоматичним підбором суперника, кімнатами-групами, рейтингом гравців у JSON-файлі та клієнтом Windows Forms, що малює поле GDI+, показує статус ходу й повідомляє про відключення суперника.
Варіант 24. Трансляція тексту лекції
1. Початковий рівень. Створити сервер SignalR, якому ведучий надсилає рядки тексту, і консольний клієнт слухача, що виводить кожен рядок одразу після надходження.
2. Базовий рівень. Створити сервер SignalR трансляції тексту лекції, що зберігає вже надіслані ведучим рядки й передає їх новому слухачу під час підключення, дозволяє надсилати текст лише ведучому (перевірка коду ведучого) і повідомляє ведучого про кількість слухачів; консольний клієнт працює в режимі ведучого або слухача.
3. Високий рівень. Створити систему «Онлайн-лекція»: сервер SignalR з кількома лекціями (групи), збереженням тексту у файлах і запитаннями слухачів ведучому; клієнт слухача Windows Forms з автопрокручуванням, пошуком у тексті та збереженням конспекту у файл.
Варіант 25. Моніторинг серверів
1. Початковий рівень. Створити сервер SignalR, якому консольний агент щосекунди надсилає ім’я комп’ютера й завантаження процесора (випадкове число від 0 до 100), і консольний клієнт адміністратора, що виводить отримані значення.
2. Базовий рівень. Створити сервер SignalR, якому консольні агенти щосекунди надсилають ім’я комп’ютера й завантаження процесора (випадкове число 0–100), а сервер зберігає останні 60 значень для кожного агента, позначає агента відключеним після OnDisconnectedAsync, надсилає попередження, якщо навантаження понад 90 % три вимірювання поспіль, і показує в консольному клієнті адміністратора таблицю агентів.
3. Високий рівень. Створити систему «Моніторинг»: консольні агенти щосекунди надсилають серверу SignalR ім’я комп’ютера й завантаження процесора, сервер має потоковий метод історії навантаження, кінцеву точку REST для порогів і журнал попереджень у файлі; клієнт Windows Forms показує графіки GDI+ для кожного агента та список активних попереджень.
Варіант 26. Спортивний тренажерний зал
1. Початковий рівень. Створити сервер SignalR зі списком тренажерів і консольний клієнт, де відвідувач займає або звільняє тренажер за номером, а всі клієнти отримують оновлений список вільних тренажерів.
2. Базовий рівень. Створити сервер SignalR тренажерного залу зі списком пронумерованих тренажерів, який не дозволяє займати зайнятий тренажер і звільняти чужий (HubException), автоматично звільняє тренажер через 20 хвилин або після відключення клієнта й надсилає всім список тренажерів з часом зайнятості; консольний клієнт займає або звільняє тренажер за номером.
3. Високий рівень. Створити систему «Тренажерний зал»: сервер SignalR з кількома залами (групи), чергою на зайнятий тренажер і статистикою використання у CSV-файлі; клієнт Windows Forms зі схемою залу GDI+ і сповіщенням, коли тренажер з черги звільнився.
Варіант 27. Новинна стрічка
1. Початковий рівень. Створити сервер SignalR з кінцевою точкою REST POST /api/news, через яку редактор публікує новину, і консольний клієнт, що виводить заголовок і час кожної нової новини.
2. Базовий рівень. Створити сервер SignalR новинної стрічки з рубриками (групи) і кінцевою точкою REST POST /api/news (рубрика, заголовок, текст), яка перевіряє, що заголовок не порожній; консольний клієнт отримує рубрики аргументами командного рядка, підписується на них і отримує останні п’ять новин кожної рубрики під час підписки та нові новини.
3. Високий рівень. Створити систему «Новини»: сервер SignalR зі збереженням новин у JSON-файлі, кінцевими точками REST для публікації та пошуку; клієнт Windows Forms зі списком новин, фільтром рубрик, підпискою та відпискою без перезапуску й лічильником непрочитаних новин.
Варіант 28. Лічильник голосів на зборах
1. Початковий рівень. Створити сервер SignalR, де голова зборів оголошує питання, а учасники голосують «за», «проти» або «утримався», і консольний клієнт, що виводить підсумки після кожного голосу.
2. Базовий рівень. Створити сервер SignalR голосування на зборах з консольними клієнтами голови й учасників: голова оголошує питання, кожен зареєстрований учасник голосує лише один раз («за», «проти», «утримався»), голова завершує голосування командою, а сервер визначає рішення (прийнято, якщо «за» більше половини присутніх) і повідомляє всім підсумок.
3. Високий рівень. Створити систему «Збори»: сервер SignalR з порядком денним із JSON-файлу, кворумом, таємним і відкритим голосуванням; клієнт голови (консольний, параметри --agenda, --help) і клієнт учасника Windows Forms; протокол голосувань зберігається в текстовий файл.
Варіант 29. Диспетчер таксі
1. Початковий рівень. Створити сервер SignalR, через який диспетчер надсилає замовлення (адреса подачі) усім водіям, і консольний клієнт водія, що виводить нові замовлення.
2. Базовий рівень. Створити сервер SignalR диспетчера таксі з консольними клієнтами диспетчера й водіїв: диспетчер надсилає замовлення (адреса подачі) усім вільним водіям, замовлення отримує перший водій, що прийняв його (інші отримують відмову), диспетчер отримує ім’я водія, а водій, який виконує замовлення, не отримує нових до його завершення.
3. Високий рівень. Створити систему «Таксі»: сервер SignalR з координатами водіїв, надсиланням замовлення трьом найближчим водіям, кінцевою точкою REST для клієнтів і журналом поїздок у CSV; клієнт диспетчера Windows Forms зі схемою міста GDI+ і списком активних замовлень.
Варіант 30. Малюнки-вгадайки
1. Початковий рівень. Створити сервер SignalR, де один гравець надсилає підказку до загаданого слова, а інші надсилають варіанти, і консольний клієнт, що виводить підказки та повідомлення про правильну відповідь.
2. Базовий рівень. Створити сервер SignalR гри в раунди «вгадай слово»: художник обирається по черзі, лише він отримує слово (Clients.Client) і надсилає підказки, вгадування інших гравців порівнюється без урахування регістру, бали нараховуються художнику й першому, хто вгадав, а раунд завершується через 60 с; консольний клієнт надсилає підказки або варіанти й виводить повідомлення.
3. Високий рівень. Створити гру «Малюнки-вгадайки»: сервер SignalR з кімнатами (групи), словами з текстового файлу й таблицею рекордів у JSON-файлі; клієнт Windows Forms, у якому художник малює мишею, штрихи миттєво з’являються в інших гравців, а поруч є чат для вгадувань.
Порядок виконання та захисту роботи
- Опрацювати теоретичні відомості та приклади розв’язання завдань.
- Спроєктувати обмін повідомленнями: методи хабу, методи клієнта (інтерфейс строго типізованого хабу), групи та стан, який зберігається на сервері.
- Створити у Visual Studio 2026 рішення з проєктом сервера (ASP.NET Core Empty, .NET 10) і проєктами клієнтів; додати до клієнтів пакет
Microsoft.AspNetCore.SignalR.Client. - Реалізувати хаб, служби та кінцеві точки сервера; клієнти з обробниками
On, перевіркою введених даних, обробкоюHubExceptionі перепідключенням. - Перевірити роботу з кількома клієнтами, запущеними одночасно, з некоректними даними, після зупинки й повторного запуску сервера.
- Продемонструвати роботу викладачеві, пояснити програмний код і відповісти на контрольні питання.