/
seneka.y
/
ClientServer
Обзор
Документация
Войти
/
seneka.y
/
ClientServer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
server/clientworker.h
100 строк
3 KB
Julia Sinika
Initial commit
09 ноя 2025, 22:05
09 ноя 2025, 22:05
bfef146
Код
Авторство
О чём код?
#ifndef CLIENTWORKER_H #define CLIENTWORKER_H #include <QObject> #include <QTcpSocket> /** * @class ClientWorker * @brief Обработчик клиентского соединения в отдельном потоке * * Работает в собственном потоке и обрабатывает JSON запросы от клиента. * Поддерживает операции: добавление, получение, удаление и обновление пользователей. */ class ClientWorker : public QObject { Q_OBJECT public: /** * @brief Конструктор обработчика * @param parent Родительский объект для управления памятью */ explicit ClientWorker(QObject* parent = nullptr); /** * @brief Деструктор, корректно закрывает сокет */ ~ClientWorker(); public slots: /** * @brief Инициализировать worker с дескриптором сокета * @param socketDescriptor Дескриптор сокета клиента * * Должен вызваться в рабочем потоке после moveToThread(). * Создает QTcpSocket и подключает сигналы. */ void initialize(qintptr socketDescriptor); private slots: /** * @brief Обработать готовые к чтению данные от клиента * * Читает JSON запрос и передает его на обработку. */ void onReadyRead(); /** * @brief Обработать отключение клиента * * Закрывает сокет и удаляет worker. */ void onDisconnected(); /** * @brief Обработать ошибку сокета * @param error Код ошибки */ void onError(QAbstractSocket::SocketError error); private: /** * @brief Разобрать JSON запрос и вызвать соответствующий обработчик * @param data JSON данные от клиента */ void processRequest(const QByteArray& data); /** * @brief Обработать запрос на добавление пользователя * @param request JSON объект с данными пользователя */ void handleAddUser(const QJsonObject& request); /** * @brief Обработать запрос на получение всех пользователей */ void handleGetUsers(); /** * @brief Обработать запрос на удаление пользователя * @param request JSON объект с ID пользователя */ void handleDeleteUser(const QJsonObject& request); /** * @brief Обработать запрос на обновление пользователя * @param request JSON объект с данными для обновления */ void handleUpdateUser(const QJsonObject& request); /** * @brief Отправить JSON ответ клиенту * @param response JSON объект ответа * * Преобразует ответ в JSON, отправляет через сокет и гарантирует доставку. */ void sendResponse(const QJsonObject& response); QTcpSocket* m_socket; ///< Сокет для связи с клиентом }; #endif // CLIENTWORKER_H