feat: add logger with write to file

This commit is contained in:
semenov
2025-08-06 16:04:53 +03:00
parent 305fcb2fad
commit 34dddad3cd
20 changed files with 213 additions and 154 deletions

View File

@@ -5,14 +5,11 @@ CommonClientHandler::CommonClientHandler(QObject *parent) : QObject(parent)
}
void CommonClientHandler::initialize(QMap<int, ClientHandler *> *clientsMap, ProcessingSystem *processingSystem, DataParser *dataParser, Logger *logger)
void CommonClientHandler::initialize(QMap<int, ClientHandler *> *clientsMap, ProcessingSystem *processingSystem, DataParser *dataParser)
{
this->clientsMap = clientsMap;
this->processingSystem = processingSystem;
this->dataParser = dataParser;
this->logger = logger;
connect(this,&CommonClientHandler::sigSendToLogger,logger,&Logger::addTextToLogger,Qt::AutoConnection);
}
void CommonClientHandler::sendNewVersionListToAllClient()

View File

@@ -15,8 +15,7 @@ public:
explicit CommonClientHandler(QObject *parent = nullptr);
void initialize(QMap<int, ClientHandler*> *clientsMap,
ProcessingSystem *processingSystem,
DataParser *dataParser,
Logger *logger);
DataParser *dataParser);
void sendNewVersionListToAllClient();
void sendCurrentVersionToAllClient();
@@ -32,8 +31,6 @@ private:
QMap<int, ClientHandler*> *clientsMap;
ProcessingSystem *processingSystem;
DataParser *dataParser;
Logger *logger;
};
#endif // COMMONCLIENTHANDLER_H

View File

@@ -2,10 +2,16 @@
#include <QThread>
Logger::Logger()
{
//this->listWidget = widget;
connect(this,&Logger::sigAddToLogger, this, &Logger::handleLog,Qt::QueuedConnection);
createDirectory();
}
Logger &Logger::instance()
{
static Logger logger;
return logger;
}
Logger::~Logger()
@@ -13,22 +19,79 @@ Logger::~Logger()
}
void Logger::setTypeLog(QString type)
void Logger::setLoggingType(LoggingType type)
{
typeLogger = type;
this->loggingType = type;
}
void Logger::addTextToLogger(QString msg)
void Logger::log(QString message, LogLevel level)
{
if(typeLogger == "widget")
emit sigAddToLogger(message,level);
}
void Logger::setLogFile(QString filePath)
{
QMutexLocker locker(&mutex);
if (logFile.isOpen())
{
emit sigSendTextToLogger(msg);
logFile.close();
}
else if (typeLogger == "console")
logFile.setFileName(filePath);
logFile.open(QIODevice::WriteOnly | QIODevice::Append);
}
void Logger::setLogToFile(bool flag)
{
isLogToFile = flag;
if (flag)
{
//qDebug() << msg;
}else
{
emit sigSendTextToLogger(msg);
QString filePath = logFolderPath + "/" + "log " + QDateTime::currentDateTime().toString("dd-MM-yyyy")+".txt";
setLogFile(filePath);
}
}
void Logger::handleLog(QString msg, LogLevel logLevel)
{
QString level;
switch (logLevel)
{
case INFO: level = "INFO"; break;
case WARNING: level = "WARNING"; break;
case ERROR: level = "ERROR"; break;
case CRITICAL: level = "CRITICAL"; break;
}
QString timeStamp = QDateTime::currentDateTime().toString("hh:mm:ss");
QString message = timeStamp + " " + level + " " + msg;
if (loggingType == LoggingType::WIDGET)
{
emit sigLogToWidget(message);
}
else if(loggingType == LoggingType::CONSOLE)
{
qDebug() << message;
}
if(isLogToFile)
{
QMutexLocker locker(&mutex);
if (logFile.isOpen())
{
QTextStream stream(&logFile);
stream << message << "\n";
}
}
}
void Logger::createDirectory()
{
QString directoryPath = logFolderPath;
QDir dir(directoryPath);
if(!dir.exists()) dir.mkdir(".");
}

View File

@@ -1,25 +1,58 @@
#ifndef LOGGER_H
#define LOGGER_H
#include <QPlainTextEdit>
#include <QDateTime>
#include <QMutex>
#include <QObject>
#include <QDebug>
#include <QDir>
#include "Systems/tools.h"
enum LogLevel
{
INFO,
WARNING,
ERROR,
CRITICAL
};
enum LoggingType
{
WIDGET,
CONSOLE,
TOFILE
};
class Logger : public QObject
{
Q_OBJECT
public:
explicit Logger();
Logger();
static Logger& instance();
~Logger();
void setTypeLog(QString type);
void setWidget(QPlainTextEdit * widget);
void setLoggingType(LoggingType type);
void log(QString message,LogLevel level = INFO);
void setLogFile(QString filePath);
void setLogToFile(bool flag);
public slots:
void addTextToLogger(QString msg);
void handleLog(QString msg,LogLevel logLevel = INFO);
signals:
void sigSendTextToLogger(QString msg);
void sigAddToLogger(QString msg, LogLevel logLevel = INFO);
void sigLogToWidget(QString message);
private:
//ServerLMSWidget *listWidget;
QString typeLogger;
QString msg;
QFile logFile;
LoggingType loggingType;
QMutex mutex;
bool isLogToFile;
void createDirectory();
};
#endif // LOGGER_H

View File

@@ -13,7 +13,6 @@ ProcessingSystem::ProcessingSystem(ProviderDBLMS* providerDBLMS, UpdateControlle
void ProcessingSystem::initialize(MultiThreadServer *server, DataParser *dataParser,
CommonClientHandler *commonClientHandler,
Logger *logger,
UpdateController *updateController,
ChatSystem *chatSystem)
{
@@ -27,9 +26,8 @@ void ProcessingSystem::initialize(MultiThreadServer *server, DataParser *dataPar
connect(this,&ProcessingSystem::sigStatusTasksAMMofTraineeChanged,commonClientHandler, &CommonClientHandler::slot_StatusTasksAMMofTraineeChanged,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigStatusTasksFIMofTraineeChanged,commonClientHandler, &CommonClientHandler::slot_StatusTasksFIMofTraineeChanged,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigUpdateListClients,server,&MultiThreadServer::updateClientList,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigSetData,updateController,&UpdateController::setDataInfo,Qt::AutoConnection);
connect(this,&ProcessingSystem::sigLogMessage,logger,&Logger::addTextToLogger,Qt::QueuedConnection);
}
void ProcessingSystem::processingClientAutorization(ClientHandler *client, ClientAutorization clientAutorization)
@@ -40,7 +38,7 @@ void ProcessingSystem::processingClientAutorization(ClientHandler *client, Clien
client->sendXmlAnswer(arrayAnswer);
QString str = QString(arrayAnswer);
emit sigLogMessage("To Client: " + str);
Logger::instance().log("To Client: " + str);
return;
}
@@ -108,7 +106,7 @@ void ProcessingSystem::processingClientDeAutorization(ClientHandler *client, Cli
client->sendXmlAnswer(arrayAnswer);
QString str = QString(arrayAnswer);
emit sigLogMessage("To Client: " + str);
Logger::instance().log("To Client: " + str);
return;
}
@@ -498,6 +496,7 @@ void ProcessingSystem::processingClientQueryTasksXML(ClientHandler *client, Clie
{
nameFile = tasksFIMfileName;
pathFile = updateController->getPathAdditionalFile(nameFile);
Logger::instance().log(pathFile);
client->sendFileBlock(pathFile);
client->sendPacketType(PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_FIM);
}

View File

@@ -29,7 +29,6 @@ public:
void initialize(MultiThreadServer *server,
DataParser* dataParser,
CommonClientHandler *commonClientServer,
Logger *logger,
UpdateController *updateComtroller,
ChatSystem *chatSystem);
@@ -62,7 +61,6 @@ signals:
void sigListsInstructorsTraineesChanged();
void sigStatusTasksAMMofTraineeChanged(int trainee_id);
void sigStatusTasksFIMofTraineeChanged(int trainee_id);
void sigLogMessage(QString log);
void sigAddToMessanger(QString login,QString text);
void sigSetData(DataInfo *dataInfo);

View File

@@ -139,7 +139,7 @@ void RecognizeSystem::recognize()
stream.commitTransaction();
//if(!) continue;
//ПОЛУЧЕНИЕ САМОГО ФАЙЛА
qDebug() << (Tools::getTime() + "AfterRead size and path BytesAvailable: " + socket->bytesAvailable());
Logger::instance().log("AfterRead size and path BytesAvailable: " + QString::number(socket->bytesAvailable()));
qint64 readSize = 65535;
forever
@@ -148,7 +148,7 @@ void RecognizeSystem::recognize()
if(fileSize < readSize)
{
readSize = fileSize;
qDebug() << "LastPackage: " << readSize;
Logger::instance().log("LastPackage: " + QString::number(readSize));
}
socket->waitForReadyRead(20);
@@ -165,7 +165,7 @@ void RecognizeSystem::recognize()
if(fileSize == 0) break;
}
qDebug() << (Tools::getTime() + "File loaded");
Logger::instance().log("File loaded");
//ОЧИСТКА ПОСЛЕ ПЕРЕДАЧИ
fileSize = 0;
@@ -225,7 +225,7 @@ void RecognizeSystem::recognize()
if (file.exists())
{
file.remove(); //удаление файла, если он уже есть, но необходимо обновить
qDebug() << Tools::getTime() + "Delete exist file: " + filePath;
Logger::instance().log("Delete exist file: " + filePath);
}
if (!file.open(QFile::Append))
@@ -333,11 +333,10 @@ void RecognizeSystem::recognize()
}
QString logMessage = Tools::getTime() + " ";
logMessage.append("Load from " + client->getLogin() + " ");
QString logMessage = "Load from " + client->getLogin() + " ";
logMessage.append(fileInfo.fileName());
emit sigSendToLogger(logMessage);
Logger::instance().log(logMessage);
file.close();

View File

@@ -1,22 +1,20 @@
#include "sendsystem.h"
SendSystem::SendSystem(QObject *parent) : QObject(parent)
{
isSendStopped = false;
}
void SendSystem::initialize(DataParser *dataParser,Logger *logger)
void SendSystem::initialize(DataParser *dataParser,QMutex *globalMutex)
{
this->dataParser = dataParser;
this->logger = logger;
connect(this,&SendSystem::sigSendToLogger,logger,&Logger::addTextToLogger,Qt::AutoConnection);
connect(this,&SendSystem::sigSendXMLmessage,dataParser->ClientAnswer(),&ClientAnswerParser::message,Qt::AutoConnection);
connect(this,&SendSystem::sigSendNotify,dataParser->ClientAnswer(),&ClientAnswerParser::notify,Qt::DirectConnection); //потому что возвращает значение
connect(this,&SendSystem::sigSendVersion,dataParser->ClientAnswer(),&ClientAnswerParser::currentVersion,Qt::AutoConnection);
qDebug() << "SendSystem thread: " << QThread::currentThreadId();
mutex = globalMutex;
}
void SendSystem::setClient(Client *client,QTcpSocket *socket)
@@ -35,30 +33,35 @@ void SendSystem::sendMessageBlock(QString message)
void SendSystem::sendFileBlock(QString path)
{
qDebug() << "sendFileBlock thread: " << QThread::currentThreadId();
//qDebug() << "sendFileBlock thread: " << QThread::currentThreadId();
Logger::instance().log("TRY LOCK MUTEX : " + client->getLogin(),LogLevel::WARNING);
QMutexLocker locker(mutex);
Logger::instance().log("LOCK MUTEX " + client->getLogin(),LogLevel::WARNING);
QFile file(path);
QFileInfo fileInfo(file);
Logger::instance().log("OPEN FILE : " + client->getLogin() + " " + fileInfo.fileName());
if(isSendStopped)
{ //Поведение на случай отключения клиента
file.close();
Logger::instance().log("UNLOCK STOP MUTEX : " + client->getLogin(),LogLevel::ERROR);
return;
}
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
fileSize = file.size();
Logger::instance().log("size FILE :" + client->getLogin() + " " + QString::number(fileSize));
fileSize = fileInfo.size();
if(fileSize == 0){
emit sigSendToLogger(Tools::getTime() + " WARNING! Zero size " + path);
if (fileSize == 0)
{
Logger::instance().log("Client: " + client->getLogin() + " WARNING! Zero size " + fileInfo.fileName(),LogLevel::ERROR);
Logger::instance().log(path,LogLevel::ERROR);
Logger::instance().log("UNLOCK SIZE MUTEX : " + client->getLogin(),LogLevel::ERROR);
return;
}
stream << PacketType::TYPE_FILE; //Отправляем тип блока
stream << path << fileSize;
@@ -77,14 +80,17 @@ void SendSystem::sendFileBlock(QString path)
//emit sigSendToLogger(Tools::getTime() + " send file " + fileInfo.fileName());
}
Logger::instance().log("Sended to : " + client->getLogin() + " : " + fileInfo.fileName());
file.close();
Logger::instance().log("CLOSE FILE : " + client->getLogin() + " " + fileInfo.fileName());
countSend = 0;
Logger::instance().log("UNLOCK MUTEX : " + client->getLogin(),LogLevel::WARNING);
}
void SendSystem::sendFileBlockByteArray(QByteArray array, PacketType packetType)
{
qDebug() << "sendFileBlockByteArray thread: " << QThread::currentThreadId();
QMutexLocker locker(mutex);
if(client->GETTYPE() == TypeClientAutorization::TYPE_QT_CLIENT ||
client->GETTYPE() == TypeClientAutorization::TYPE_GUI)
{
@@ -94,7 +100,7 @@ void SendSystem::sendFileBlockByteArray(QByteArray array, PacketType packetType)
fileSize = array.size();
if(fileSize == 0){
emit sigSendToLogger(Tools::getTime() + " WARNING! Zero size ");
Logger::instance().log(" WARNING! Zero size ",LogLevel::ERROR);
return;
}
@@ -123,6 +129,7 @@ void SendSystem::sendVersion()
void SendSystem::sendFileBlockWithRename(QString path, QString newName)
{
QMutexLocker locker(mutex);
qDebug() << "sendFileBlockWithRename thread: " << QThread::currentThreadId();
QDataStream stream(socket);
@@ -133,7 +140,7 @@ void SendSystem::sendFileBlockWithRename(QString path, QString newName)
fileSize = fileInfo.size();
if(fileSize == 0){
emit sigSendToLogger(Tools::getTime() + " WARNING! Zero size " + path);
Logger::instance().log("Client: " + client->getLogin() + " WARNING! Zero size " + fileInfo.fileName(),LogLevel::ERROR);
return;
}
@@ -160,7 +167,7 @@ void SendSystem::sendFileBlockWithRename(QString path, QString newName)
countSend++;
}
emit sigSendToLogger(Tools::getTime() + " send file " + fileInfo.fileName());
Logger::instance().log("Send file " + fileInfo.fileName());
}
file.close();
@@ -194,6 +201,7 @@ void SendSystem::sendDeleteBlock(QString path)
void SendSystem::sendPacketType(PacketType packetType)
{
QMutexLocker locker(mutex);
if (client->GETTYPE() == TypeClientAutorization::TYPE_QT_CLIENT ||
client->GETTYPE() == TypeClientAutorization::TYPE_GUI)
{
@@ -219,6 +227,7 @@ void SendSystem::sendHello()
void SendSystem::sendNotify(QString notify)
{
QMutexLocker locker(mutex);
qDebug() << "SendNotify thread: " << QThread::currentThreadId();
auto answer = emit sigSendNotify(notify);//"END");
sendXmlAnswer(answer);
@@ -226,6 +235,7 @@ void SendSystem::sendNotify(QString notify)
void SendSystem::sendXmlAnswer(QByteArray array, PacketType packetType)
{
QMutexLocker locker(mutex);
qDebug() << "SendSystemThread: " << QThread::currentThreadId();
if (client->GETTYPE() == TypeClientAutorization::TYPE_QT_CLIENT ||
client->GETTYPE() == TypeClientAutorization::TYPE_GUI)

View File

@@ -4,6 +4,7 @@
#include <QObject>
#include <QString>
#include <QtNetwork>
#include <QMutex>
#include <Systems/Parsers/dataparser.h>
#include <Systems/tools.h>
@@ -12,7 +13,6 @@
class DataParser;
class FileData;
class SendSystem : public QObject
{
@@ -20,7 +20,7 @@ class SendSystem : public QObject
public:
explicit SendSystem(QObject* parent = nullptr);
void initialize(DataParser* dataParser,Logger *logger);
void initialize(DataParser* dataParser,QMutex *globalMutex);
void setClient(Client* client,QTcpSocket *socket);
void sendMessageBlock(QString message);
void sendFileBlock(QString path);
@@ -49,7 +49,6 @@ public slots:
signals:
void sigLoadHash();
void sigSendToLogger(QString message);
QByteArray sigSendXMLmessage(QString loginFrom, QString loginTo, QString text, QString userType);
QByteArray sigSendNotify(QString message);
QByteArray sigSendVersion();
@@ -58,9 +57,8 @@ private:
Client *client;
QTcpSocket* socket;
DataParser* dataParser;
Logger *logger;
QMutex *mutex;
quint64 fileSize;
QMutex *mutex;
int countSend;
bool isSendStopped;
TypeClientAutorization type;

View File

@@ -7,12 +7,6 @@ void Tools::printTime()
qDebug() << QTime::currentTime().toString("hh:mm:ss.zzz");
}
QString Tools::getTime()
{
return QTime::currentTime().toString("hh:mm:ss.zzz");
}
QString Tools::createLocalPath(QString path)
{
qint8 pos = path.indexOf(applicationFolderName);

View File

@@ -28,6 +28,7 @@ static const QString buildDataPath = "/Application/" + projectFolderName + "/RRJ
static const QString tasksAMMfileName = "/docs.xml"; //"/tasksAmm.xml";
static const QString tasksFIMfileName = "/tasksFIM.xml";
static const QString clientHash = staticDataFolderName + "/clientHash.xml";
static const QString logFolderPath = "log";
static const QString baseNameVersion = "base";//может вынести комманды куда нибудь?

View File

@@ -7,11 +7,11 @@ UpdateController::UpdateController(QObject *parent) :
{
buildPath = QDir::currentPath() + "/" + applicationFolderName;
sharedDataPath = QDir::currentPath() + "/" + sharedDataFolderName;
emit sigLogMessage(buildPath);
Logger::instance().log(buildPath);
qDebug() << hashFileName;
}
void UpdateController::initialize(CommonClientHandler *commonClientHandler,DataParser *dataParser,AssetsManager *assetManager,Logger *logger)
void UpdateController::initialize(CommonClientHandler *commonClientHandler,DataParser *dataParser,AssetsManager *assetManager)
{
this->commonClientHandler = commonClientHandler;
this->dataParser = dataParser;
@@ -31,8 +31,6 @@ void UpdateController::initialize(CommonClientHandler *commonClientHandler,DataP
return;
}
connect(this,&UpdateController::sigLogMessage,logger,&Logger::addTextToLogger,Qt::AutoConnection);
calculateFullHash();
currentStreamingPath = assetManager->setVersion("base"); //TODO: сохрнаять предыдущую версию и загружать ее при включении
setUpCurrentServerHash();
@@ -82,20 +80,19 @@ void UpdateController::compareFiles(ClientHandler* handler, QByteArray array)
void UpdateController::showHash()
{
for(FileData& str : serverDataList){
emit sigLogMessage(str.hash);
Logger::instance().log(str.hash);
}
}
void UpdateController::calculateFullHash()
{
qDebug() << "Calculate hash...";
Logger::instance().log("Calculate hash...");
commonClientHandler->slot_sendPacketToAllClients(PacketType::BUSY);
auto *list = calculateHash(buildPath);
saveHash(buildHashName,list);
calculateSharedHash();
emit sigLogMessage("Calculate hash complete");
Logger::instance().log("Calculate hash complete");
commonClientHandler->slot_sendPacketToAllClients(PacketType::FREE);
qDebug() << "Calculate complete...";
}
void UpdateController::calculateFullHashWithSetup()
@@ -175,7 +172,7 @@ QList<FileData>* UpdateController::loadHash(QString filename)
xmlReader.readNextStartElement();
}
emit sigLogMessage("Hash load from file ");
Logger::instance().log("Hash load from file ");
return files;
@@ -194,8 +191,8 @@ void UpdateController::calculateSize()
iterator.next();
}
emit sigLogMessage("Full size: ");
emit sigLogMessage(QString::number(total));
Logger::instance().log("Full size: ");
Logger::instance().log(QString::number(total));
}
QString UpdateController::getCommands()
@@ -272,14 +269,13 @@ bool UpdateController::checkNeedUpdate(ClientHandler *handler)
if(forSend->length() > 0) //формирование сообщения об обновлении
{
QString log;
log.append(Tools::getTime());
log.append(" Client: " + handler->getClient()->getLogin());
log.append(" Need updates: ");
log.append(QString::number(forSend->length()));
log.append(" objects");
fileSendList = *forSend;
emit sigLogMessage(log);
Logger::instance().log(log);
//printFileList(*forSend);
handler->sendMessageBlock(log);
@@ -288,16 +284,14 @@ bool UpdateController::checkNeedUpdate(ClientHandler *handler)
else
{
QString log;
log.append(Tools::getTime());
log.append(" Client: " + handler->getClient()->getLogin());
log.append(" no update required");
emit sigLogMessage(log);
Logger::instance().log(log);
handler->sendMessageBlock(log);
}
if(forDelete->length() > 0){
QString log;
log.append(Tools::getTime());
log.append(" Client: " + handler->getClient()->getLogin());
log.append(" Need delete: ");
@@ -305,7 +299,7 @@ bool UpdateController::checkNeedUpdate(ClientHandler *handler)
log.append(" objects");
fileDeleteList = *forDelete;
emit sigLogMessage(log);
Logger::instance().log(log);
//printFileList(*forDelete);
handler->sendMessageBlock(log);
needUpdate = true;
@@ -313,11 +307,10 @@ bool UpdateController::checkNeedUpdate(ClientHandler *handler)
else
{
QString log;
log.append(Tools::getTime());
log.append(" Client: " + handler->getClient()->getLogin());
log.append(" no delete required");
emit sigLogMessage(log);
Logger::instance().log(log);
handler->sendMessageBlock(log);
}
@@ -542,7 +535,7 @@ void UpdateController::printFileList(QList<FileData> fileData)
while (iterator.hasNext())
{
auto next = iterator.next();
emit sigLogMessage(next.path);
Logger::instance().log(next.path);
}
}

View File

@@ -32,7 +32,7 @@ class UpdateController : public QObject
public:
explicit UpdateController(QObject *parent = 0);
void initialize(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager,Logger *logger);
void initialize(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager);
void compareFiles(ClientHandler* handler, QByteArray array);
void showHash();
void calculateFullHash();
@@ -68,7 +68,6 @@ public slots:
void setUpCurrentServerHash();
signals:
void sigLogMessage(QString message);
void sigErrorRequired(int code);
private:

View File

@@ -10,7 +10,7 @@ ClientHandler::ClientHandler( QObject *parent):
}
void ClientHandler::initialize(int descriptor,ServerLMSWidget *serverWidget,
UpdateController *updateController,DataParser *dataParser,Logger *logger)
UpdateController *updateController,DataParser *dataParser)
{
this->socket = new QTcpSocket;
this->thread = new QThread;
@@ -40,7 +40,7 @@ void ClientHandler::initialize(int descriptor,ServerLMSWidget *serverWidget,
connect(this,&ClientHandler::sigSendXmlAnswer,sendSystem,&SendSystem::sendXmlAnswer,Qt::AutoConnection);
connect(this,&ClientHandler::sigInitSender,sendSystem,&SendSystem::initialize,Qt::AutoConnection);
connect(this,&ClientHandler::sigFileBlock,sendSystem,&SendSystem::sendFileBlock,Qt::AutoConnection);
connect(this,&ClientHandler::sigFileBlock,sendSystem,&SendSystem::sendFileBlock,Qt::QueuedConnection);
connect(this,&ClientHandler::sigFileBlockByteArray,sendSystem,&SendSystem::sendFileBlockByteArray,Qt::AutoConnection);
connect(this,&ClientHandler::sigFolderBlock,sendSystem,&SendSystem::sendFolderBlock,Qt::AutoConnection);
connect(this,&ClientHandler::sigGetIsSendStopped,sendSystem,&SendSystem::getIsSendStopped,Qt::AutoConnection);
@@ -61,9 +61,7 @@ void ClientHandler::initialize(int descriptor,ServerLMSWidget *serverWidget,
recognizeSystem->initialize(updateController,dataParser,serverWidget,sendSystem, this);
sendSystem->setClient(client,socket);
connect(recognizeSystem,&RecognizeSystem::sigSendToLogger,logger,&Logger::addTextToLogger);
emit sigInitSender(dataParser,logger);
emit sigInitSender(dataParser,serverWidget->getMutex());
}
void ClientHandler::setClient(Client *value)

View File

@@ -24,7 +24,7 @@ class ClientHandler : public QObject
public:
ClientHandler(QObject* parent = nullptr);
void initSender(DataParser *dataParser,Logger *logger);
void initSender(DataParser *dataParser);
void sendXmlAnswer(QByteArray array, PacketType packetType = PacketType::TYPE_XMLANSWER);
void sendFolderBlock(QString path);
void sendFileBlock(QString path);
@@ -51,7 +51,7 @@ public:
signals:
void sigSendXmlAnswer(QByteArray array, PacketType packetType);
void sigInitSender (DataParser *dataParse,Logger *logger);
void sigInitSender (DataParser *dataParse, QMutex *mutex);
void sigFolderBlock(QString path);
void sigFileBlock(QString path);
void sigFileBlockByteArray(QByteArray array, PacketType packetType);
@@ -76,7 +76,7 @@ public :
QTcpSocket *socket;
void initialize(int descriptor, ServerLMSWidget *serverWidget,
UpdateController *updateController, DataParser *dataParser,Logger *logger);
UpdateController *updateController, DataParser *dataParser);
void setClient(Client *value);
private:
UpdateController *updateController;

View File

@@ -1,18 +1,16 @@
#include "multithreadserver.h"
MultiThreadServer::MultiThreadServer(ServerLMSWidget *widget,UpdateController *updateController,ProcessingSystem *processingSystem,
DataParser *dataParser,Logger *logger,qint16 hostPort, QObject *parent ):
DataParser *dataParser,qint16 hostPort, QObject *parent ):
QTcpServer(parent),
serverLmsWidget(widget),
hostPort(hostPort),
processingSystem(processingSystem),
updateController(updateController),
dataParser(dataParser),
logger(logger),
stateServer(stoped),
stateBlockAutorization(unblocked)
{
connect(this,&MultiThreadServer::sigSendToLogger,logger,&Logger::addTextToLogger);
clientsMap = new QMap<int,ClientHandler*>;
}
@@ -22,13 +20,12 @@ void MultiThreadServer::incomingConnection(qintptr socketDesriptor)
connect(this,&MultiThreadServer::sigInitClient,newClient,&ClientHandler::initialize,Qt::AutoConnection);
connect(newClient,&ClientHandler::sigClientDisconnected,this,&MultiThreadServer::slotDisconnectClient,Qt::AutoConnection);
emit sigInitClient(socketDesriptor,serverLmsWidget,updateController,dataParser,logger);
emit sigInitClient(socketDesriptor,serverLmsWidget,updateController,dataParser);
disconnect(this,&MultiThreadServer::sigInitClient,newClient,&ClientHandler::initialize);
addClient(socketDesriptor,newClient);
emit sigSendToLogger("To Client: " + QString(SERVER_HELLO));
Logger::instance().log("To Client: " + QString(SERVER_HELLO));
}
bool MultiThreadServer::startServer()
@@ -39,13 +36,13 @@ bool MultiThreadServer::startServer()
if(!listen(QHostAddress::Any, hostPort))
{
logger->addTextToLogger("SERVER: start ERROR");
Logger::instance().log("SERVER: start ERROR");
stateServer = stoped;
return false;
}
else
{
logger->addTextToLogger("SERVER: start OK");
Logger::instance().log("SERVER: start OK");
stateServer = started;
return true;
}
@@ -131,7 +128,7 @@ void MultiThreadServer::slotDisconnectClient(QString peerAddress, QString peerPo
}
emit signalStopSendFile();
emit sigSendToLogger("SERVER: Client " + login + " disconnected");
Logger::instance().log("SERVER: Client " + login + " disconnected");
serverLmsWidget->slotUpdateListClients();
serverLmsWidget->getProcessingSystem()->processingClientDeAutorization(login);

View File

@@ -12,7 +12,7 @@ class MultiThreadServer : public QTcpServer
public:
MultiThreadServer(ServerLMSWidget *widget,UpdateController *updateController,ProcessingSystem *processingSystem,
DataParser *dataParser,Logger *logger, qint16 hostPort, QObject *parent = nullptr);
DataParser *dataParser, qint16 hostPort, QObject *parent = nullptr);
QMap<int, ClientHandler *> *getClientsMap() const;
@@ -35,9 +35,8 @@ public:
}
signals:
void sigInitClient(int descriptor, ServerLMSWidget *serverWidget,
UpdateController *updateController, DataParser *dataParser,Logger *logger);
UpdateController *updateController, DataParser *dataParser);
void signalStopSendFile();
void sigSendToLogger(QString text);
public slots:
void slotDisconnectClient(QString peerAddress, QString peerPort);
@@ -51,7 +50,6 @@ private:
ProcessingSystem *processingSystem;
UpdateController *updateController;
DataParser *dataParser;
Logger *logger;
EStateServer stateServer;
EStateBlockAutorization stateBlockAutorization;

View File

@@ -17,13 +17,14 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
dataParser(nullptr),
processingSystem(nullptr),
updateController(nullptr),
logger(nullptr),
providerDBLMS(nullptr)
{
ui->setupUi(this);
mutex = new QMutex;
qRegisterMetaType<PacketType>("PacketType");
qRegisterMetaType<UserType>("UserType");
qRegisterMetaType<LogLevel>("LogLevel");
errorCode = 0;
ui->btnStopServer->setEnabled(false);
@@ -40,13 +41,9 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
providerDBLMS->ConnectionToDB();
providerDBLMS->deAuthorizationAll();
logger = new Logger();
chatSystem = new ChatSystem();
connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization);
connect(logger,&Logger::sigSendTextToLogger,this,&ServerLMSWidget::slotAddToLog,Qt::AutoConnection);
logger->moveToThread(loggerThread);
assetsManager = new AssetsManager;
assetsManager->moveToThread(updateThread);
@@ -60,24 +57,25 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
dataParser = new DataParser(assetsManager,processingSystem);
commonClientHandler = new CommonClientHandler;
server = new MultiThreadServer(this,updateController,processingSystem,dataParser,logger,6000);
server = new MultiThreadServer(this,updateController,processingSystem,dataParser,6000);
loggerThread->start();
updateThread->start();
commonClientHandler->initialize(server->getClientsMap(),processingSystem,dataParser,logger);
processingSystem->initialize(server,dataParser,commonClientHandler,logger,updateController,chatSystem);
commonClientHandler->initialize(server->getClientsMap(),processingSystem,dataParser);
processingSystem->initialize(server,dataParser,commonClientHandler,updateController,chatSystem);
chatSystem->initialize(commonClientHandler,dataParser,server->getClientsMap());
logger->setTypeLog("widget");
connect(dataParser,&DataParser::sigLogMessage,logger,&Logger::addTextToLogger);
Logger::instance().moveToThread(loggerThread);
Logger::instance().setLoggingType(LoggingType::CONSOLE);
Logger::instance().setLogToFile(true);
connect(this,&ServerLMSWidget::sigUpdateController,updateController,&UpdateController::initialize,Qt::DirectConnection);
connect(this,&ServerLMSWidget::sigLog,logger,&Logger::addTextToLogger,Qt::AutoConnection);
connect(this,&ServerLMSWidget::sigCalculateFullHash,updateController,&UpdateController::calculateFullHash,Qt::AutoConnection);
connect(updateController,&UpdateController::sigErrorRequired,this,&ServerLMSWidget::setError);
connect(&Logger::instance(),&Logger::sigLogToWidget,this, &ServerLMSWidget::addToLog,Qt::QueuedConnection);
emit sigUpdateController(commonClientHandler,dataParser,assetsManager,logger);
emit sigUpdateController(commonClientHandler,dataParser,assetsManager);
on_btnStartServer_clicked();
first = true;
@@ -98,12 +96,6 @@ ServerLMSWidget::~ServerLMSWidget()
}
Logger *ServerLMSWidget::getLogger() const
{
return logger;
}
void ServerLMSWidget::slotUpdateListClients()
{
//Очищаем список
@@ -119,7 +111,12 @@ void ServerLMSWidget::slotUpdateListClients()
}
int countClients = (*server->getClientsMap()).count();
emit sigLog("SERVER: countClients = " + QString::number(countClients));
Logger::instance().log("SERVER: countClients = " + QString::number(countClients));
}
void ServerLMSWidget::addToLog(QString message)
{
ui->loggerTextField->appendPlainText(message);
}
void ServerLMSWidget::slot_BlockAutorization(bool block)
@@ -136,12 +133,6 @@ void ServerLMSWidget::slot_LanguageChanged(QString language)
qApp->installTranslator(&qtLanguageTranslator);
}
void ServerLMSWidget::slotAddToLog(QString msg)
{
ui->listWidgetLogger->addItem(msg);
ui->listWidgetLogger->scrollToBottom();
}
void ServerLMSWidget::on_btnStartServer_clicked()
{
if(server->startServer())
@@ -165,6 +156,11 @@ void ServerLMSWidget::on_btnStopServer_clicked()
}
}
QMutex *ServerLMSWidget::getMutex() const
{
return mutex;
}
void ServerLMSWidget::changeEvent(QEvent *event)
{
// В случае получения события изменения языка приложения

View File

@@ -58,9 +58,8 @@ protected:
signals:
void sigRecognize();
void sigLog(QString log);
void sigCalculateFullHash();
void sigUpdateController(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager,Logger *logger);
void sigUpdateController(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager);
QTcpSocket* sigGetSocket();
@@ -68,8 +67,7 @@ public slots:
void slot_LanguageChanged(QString language);
void slotUpdateListClients();
void slot_BlockAutorization(bool block);
void slotAddToLog(QString msg);
void addToLog(QString message);
public:
void removeClient(int socketId);
@@ -83,7 +81,7 @@ public:
return processingSystem;
}
Logger *getLogger() const;
QMutex *getMutex() const;
private slots:
void on_btnStartServer_clicked();
@@ -96,12 +94,12 @@ private:
MultiThreadServer *server;
QThread *updateThread;
QThread *loggerThread;
QMutex *mutex;
DataParser *dataParser;
ProcessingSystem *processingSystem;
UpdateController *updateController;
AssetsManager *assetsManager;
Logger *logger;
CommonClientHandler *commonClientHandler;
ChatSystem *chatSystem;

View File

@@ -43,18 +43,9 @@
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QListWidget" name="listWidgetLogger">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>200</height>
</size>
<widget class="QPlainTextEdit" name="loggerTextField">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>