#include "commonclienthandler.h" CommonClientHandler::CommonClientHandler(QObject *parent) : QObject(parent) { qDebug() << "CommonClientHandler init thread ID " << QThread::currentThreadId(); } void CommonClientHandler::initialize(QMap *clientsMap, ProcessingSystem *processingSystem, DataParser *dataParser) { qDebug() << "CommonClientHandler::initialize thread ID " << QThread::currentThreadId(); this->clientsMap = clientsMap; this->processingSystem = processingSystem; this->dataParser = dataParser; } void CommonClientHandler::sendNewVersionListToAllClient() { foreach(int idSocket,clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); if (!handler->getClient()->getIsLoggedIn()) continue; handler->sendVersionList(); } } void CommonClientHandler::sendCurrentVersionToAllClient() { foreach(int idSocket,clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); if (!handler->getClient()->getIsLoggedIn()) continue; handler->sendVersion(); } } void CommonClientHandler::slot_ListsInstructorsTraineesChanged_forUserID(int id_user) { //Проходим все открытые сокеты foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); //Проверяем, есть ли клиенты TYPE_GUI с нужным ID if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI && handler->getClient()->getId() == QString::number(id_user)) {//Отправляем этому клиенту обновление списков ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_LISTS; processingSystem->processingClientQueryToDB(handler, queryToDB); } /* if(handler->getClient()->getClientType() == TypeClientAutorization::TYPE_UNITY_CLIENT) { ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_CONTACT_LIST; processingSystem->processingClientQueryToDB(handler, queryToDB); }*/ } } void CommonClientHandler::slot_ListInstructorsChanged() { //Проходим все открытые сокеты foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); //Проверяем, есть ли клиенты TYPE_GUI if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI) {//Отправляем этому клиенту обновление списков ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_INSTRUCTORS; processingSystem->processingClientQueryToDB(handler, queryToDB); } if(handler->getClient()->getClientType() == TypeClientAutorization::TYPE_UNITY_CLIENT) { ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_CONTACT_LIST; processingSystem->processingClientQueryToDB(handler, queryToDB); } } } void CommonClientHandler::slot_ListTraineesChanged() { //Проходим все открытые сокеты foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); //Проверяем, есть ли клиенты TYPE_GUI if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI) {//Отправляем этому клиенту обновление списков ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_TRAINEES; processingSystem->processingClientQueryToDB(handler, queryToDB); } if(handler->getClient()->getClientType() == TypeClientAutorization::TYPE_UNITY_CLIENT) { ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_CONTACT_LIST; processingSystem->processingClientQueryToDB(handler, queryToDB); } } } void CommonClientHandler::slot_ListGroupsChanged() { //Проходим все открытые сокеты foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); //Проверяем, есть ли клиенты TYPE_GUI if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI) {//Отправляем этому клиенту обновление списков ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_ALL_GROUPS; processingSystem->processingClientQueryToDB(handler, queryToDB); } if(handler->getClient()->getClientType() == TypeClientAutorization::TYPE_UNITY_CLIENT) { ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_CONTACT_LIST; processingSystem->processingClientQueryToDB(handler, queryToDB); } } } void CommonClientHandler::slot_StatusTasksAMMofTraineeChanged(int trainee_id) { //Проходим все открытые сокеты foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); //Проверяем, есть ли клиенты TYPE_GUI if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI) {//Отправляем этому клиенту задачи AMM для Обучаемого (с измененным статусом) ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_TASKS_AMM_FOR_TRAINEE; processingSystem->processingClientQueryToDB(handler, queryToDB, trainee_id); } } /* //Отправка списка задач AMM клиенту Юнити if(ClientHandler* clientUnity = processingSystem->getUnityClientById(trainee_id)) {//Есть такой //processingSystem->sendListTasksAMMofTraineetoClient(clientUnity, trainee_id); }*/ } void CommonClientHandler::slot_StatusTasksFIMofTraineeChanged(int trainee_id) { //Проходим все открытые сокеты foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); //Проверяем, есть ли клиенты TYPE_GUI if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI) {//Отправляем этому клиенту задачи FIM для Обучаемого (с измененным статусом) ClientQueryToDB queryToDB; queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE; processingSystem->processingClientQueryToDB(handler, queryToDB, trainee_id); } } /* //Отправка списка задач FIM клиенту Юнити if(ClientHandler* clientUnity = processingSystem->getUnityClientById(trainee_id)) {//Есть такой //processingSystem->sendListTasksFIMofTraineetoClient(clientUnity, trainee_id); }*/ } void CommonClientHandler::slot_sendPacketToAllClients(PacketType packetType, bool flOnlyGUI) { foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); if(flOnlyGUI) { if(handler->getClient()->getTypeClient() != TypeClientAutorization::TYPE_GUI) continue; } //if(packetType != PacketType::BUSY && packetType != PacketType::FREE) if (!handler->getClient()->getIsLoggedIn()) continue; handler->sendPacketType(packetType); if(flOnlyGUI) Logger::instance().log("All GUI Sending " + handler->getClient()->getLogin() + " " + enumToString(packetType), LogLevel::DEBUG); else Logger::instance().log("All Sending " + handler->getClient()->getLogin() + " " + enumToString(packetType), LogLevel::DEBUG); } //emit sigSetServerState(packetType); } void CommonClientHandler::slot_sendTaskToClient(QString fullNameClient,QString textTask) { QByteArray byteArrayTask = dataParser->ClientAnswer()->task(textTask); //Проходим все открытые сокеты foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); if(handler->getClient()->getFullName() == fullNameClient) {//Отправляем ему handler->getSocket()->write(byteArrayTask); QString peerAddress = handler->getSocket()->peerAddress().toString(); QString peerPort = QString::number(handler->getSocket()->peerPort()); } } } void CommonClientHandler::slot_DocsChanged() { //Проходим все открытые сокеты foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); TypeClientAutorization type = handler->getClient()->getTypeClient(); //Отправляем всем заинтересованным клиентам оповещение об изменении docs.xml if(type == TypeClientAutorization::TYPE_GUI) { handler->sendPacketType(PacketType::TYPE_XMLANSWER_DOCS_CHANGED); } else if(type == TypeClientAutorization::TYPE_QT_CLIENT) { handler->sendPacketType(PacketType::TYPE_XMLANSWER_DOCS_CHANGED); } else if(type == TypeClientAutorization::TYPE_UNITY_CLIENT) { //handler->sendPacketType(PacketType::TYPE_XMLANSWER_DOCS_CHANGED); //Unity не обязательно! } } } void CommonClientHandler::sendUpdatedCFI(QByteArray array) { foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); TypeClientAutorization type = handler->getClient()->getTypeClient(); if(type == TypeClientAutorization::TYPE_UNITY_CLIENT) { handler->sendXmlAnswer(array,PacketType::TYPE_UPDATEDCFI); } } }