Files
RRJServer/LibServer/Systems/commonclienthandler.cpp
2026-01-29 17:12:15 +03:00

193 lines
6.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "commonclienthandler.h"
CommonClientHandler::CommonClientHandler(QObject *parent) : QObject(parent)
{
}
void CommonClientHandler::initialize(QMap<int, ClientHandler *> *clientsMap, ProcessingSystem *processingSystem, DataParser *dataParser)
{
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()
{
//Проходим все открытые сокеты
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_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_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::sendXmlAnswer(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);
}
}
}