и BroadcastManager і ClientManager.
Для забезпечення одночасного виконання зазначених частин системи, кожна з них буде виконуватися в окремому програмному потоці. Для коректної взаємодії з розділяються ресурсами будуть використовуватися механізми синхронізації. p align="justify"> Загальний життєвий цикл програми складається з наступних етапів:
. Запуск сервера, при цьому запускаються окремі потоки для ConnectManager і BroadcastManager;
. При отриманні коректного вхідного підключення ConnectManager запускає для підключився користувача новий потік ClientManager;
. При відключенні користувача відповідний потік завершується;
. При зупинці сервера завершуються всі потоки.
Далі більш докладно розглядаються всі основні частини серверного додатку.
2.3.1 Обробка вхідних підключень
Даний потік приймає вхідні підключення і управляє користувацькими потоками. За наявності вхідного підключення перевіряється коректність вхідних пакетів: якщо це коректний пакет запиту на вхід або реєстрацію, то виконуються відповідні дії, інакше пакети ігноруються, а з'єднання. p align="justify"> Далі користувач або реєструється, або входить в систему. Після успішної авторизації запускається користувальницький потік для цього користувача, і тепер за взаємодію з ним відповідає цей новий потік. У разі виникнення будь-яких помилок повідомлення про них будуть записані в балку. p align="justify"> Алгоритм обробки сервером вхідних підключень зображений на малюнку 2.2.
В
Малюнок 2.2. UML-діаграма дій потоку обробки вхідних підключень. br/>
2.3.2 Робота користувацького потоку
Користувальницький потік відповідає за будь-яку взаємодію з користувачем. Після його запуску він відправляє пакети підтвердження підключення, а далі запускається нескінченний цикл обробки вхідних пакетів. У цьому циклі відбувається періодичний опитування клієнта на доступність (ping), обробка всіх адресованих відповідному користувачеві пакетів та надсилання пакетів користувача. При неможливості відправки пакета опитування доступності клієнт буде вважатися відключити, і потік буде завершений. p align="justify"> Залежно від типу пакету, що прийшов виконуються необхідні дії. Будь коректний пакет, що прийшов буде додано в загальну чергу відправки, некоректний пакет буде проігнорований, і повідомлення про це буде записано в лог. br/>
2.3.3 Робота потоку відправки
Завдання даного потоку - відправляти відповідні пакети всім користувачам. Для цього даний потік зчитує пакет із загальної черги пакетів і додає його в чергу для...