diff --git a/ServerLMS/Systems/commonclienthandler.cpp b/ServerLMS/Systems/commonclienthandler.cpp index 7822b9a..c7af493 100644 --- a/ServerLMS/Systems/commonclienthandler.cpp +++ b/ServerLMS/Systems/commonclienthandler.cpp @@ -5,14 +5,11 @@ CommonClientHandler::CommonClientHandler(QObject *parent) : QObject(parent) } -void CommonClientHandler::initialize(QMap *clientsMap, ProcessingSystem *processingSystem, DataParser *dataParser, Logger *logger) +void CommonClientHandler::initialize(QMap *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() diff --git a/ServerLMS/Systems/commonclienthandler.h b/ServerLMS/Systems/commonclienthandler.h index 3e50560..f3b5f96 100644 --- a/ServerLMS/Systems/commonclienthandler.h +++ b/ServerLMS/Systems/commonclienthandler.h @@ -15,8 +15,7 @@ public: explicit CommonClientHandler(QObject *parent = nullptr); void initialize(QMap *clientsMap, ProcessingSystem *processingSystem, - DataParser *dataParser, - Logger *logger); + DataParser *dataParser); void sendNewVersionListToAllClient(); void sendCurrentVersionToAllClient(); @@ -32,8 +31,6 @@ private: QMap *clientsMap; ProcessingSystem *processingSystem; DataParser *dataParser; - Logger *logger; - }; #endif // COMMONCLIENTHANDLER_H diff --git a/ServerLMS/Systems/logger.cpp b/ServerLMS/Systems/logger.cpp index 4ed5e90..e42ba55 100644 --- a/ServerLMS/Systems/logger.cpp +++ b/ServerLMS/Systems/logger.cpp @@ -2,10 +2,16 @@ #include - 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("."); + +} diff --git a/ServerLMS/Systems/logger.h b/ServerLMS/Systems/logger.h index 7f1c58c..b8fac02 100644 --- a/ServerLMS/Systems/logger.h +++ b/ServerLMS/Systems/logger.h @@ -1,25 +1,58 @@ #ifndef LOGGER_H #define LOGGER_H +#include +#include +#include #include +#include +#include +#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 diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index e9b466e..1c7de4d 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -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); } diff --git a/ServerLMS/Systems/processingsystem.h b/ServerLMS/Systems/processingsystem.h index 7e360cd..e0ff3f2 100644 --- a/ServerLMS/Systems/processingsystem.h +++ b/ServerLMS/Systems/processingsystem.h @@ -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); diff --git a/ServerLMS/Systems/recognizesystem.cpp b/ServerLMS/Systems/recognizesystem.cpp index 71bbc00..b1920cb 100644 --- a/ServerLMS/Systems/recognizesystem.cpp +++ b/ServerLMS/Systems/recognizesystem.cpp @@ -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(); diff --git a/ServerLMS/Systems/sendsystem.cpp b/ServerLMS/Systems/sendsystem.cpp index 3515894..18317da 100644 --- a/ServerLMS/Systems/sendsystem.cpp +++ b/ServerLMS/Systems/sendsystem.cpp @@ -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) diff --git a/ServerLMS/Systems/sendsystem.h b/ServerLMS/Systems/sendsystem.h index 4e2146f..79ea0b0 100644 --- a/ServerLMS/Systems/sendsystem.h +++ b/ServerLMS/Systems/sendsystem.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -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; diff --git a/ServerLMS/Systems/tools.cpp b/ServerLMS/Systems/tools.cpp index 65f6131..acaa03b 100644 --- a/ServerLMS/Systems/tools.cpp +++ b/ServerLMS/Systems/tools.cpp @@ -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); diff --git a/ServerLMS/Systems/tools.h b/ServerLMS/Systems/tools.h index b37a867..f25ebff 100644 --- a/ServerLMS/Systems/tools.h +++ b/ServerLMS/Systems/tools.h @@ -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";//может вынести комманды куда нибудь? diff --git a/ServerLMS/Systems/updatecontroller.cpp b/ServerLMS/Systems/updatecontroller.cpp index 9b5dbda..b4d6e8b 100644 --- a/ServerLMS/Systems/updatecontroller.cpp +++ b/ServerLMS/Systems/updatecontroller.cpp @@ -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* 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) while (iterator.hasNext()) { auto next = iterator.next(); - emit sigLogMessage(next.path); + Logger::instance().log(next.path); } } diff --git a/ServerLMS/Systems/updatecontroller.h b/ServerLMS/Systems/updatecontroller.h index b3046dc..ffb6312 100644 --- a/ServerLMS/Systems/updatecontroller.h +++ b/ServerLMS/Systems/updatecontroller.h @@ -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: diff --git a/ServerLMS/clienthandler.cpp b/ServerLMS/clienthandler.cpp index 5e1f576..d11c873 100644 --- a/ServerLMS/clienthandler.cpp +++ b/ServerLMS/clienthandler.cpp @@ -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) diff --git a/ServerLMS/clienthandler.h b/ServerLMS/clienthandler.h index a1641aa..b9189af 100644 --- a/ServerLMS/clienthandler.h +++ b/ServerLMS/clienthandler.h @@ -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; diff --git a/ServerLMS/multithreadserver.cpp b/ServerLMS/multithreadserver.cpp index 90f68dc..3b4956a 100644 --- a/ServerLMS/multithreadserver.cpp +++ b/ServerLMS/multithreadserver.cpp @@ -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; } @@ -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); diff --git a/ServerLMS/multithreadserver.h b/ServerLMS/multithreadserver.h index 761b61f..f748395 100644 --- a/ServerLMS/multithreadserver.h +++ b/ServerLMS/multithreadserver.h @@ -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 *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; diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp index f083b1b..b5a9979 100644 --- a/ServerLMS/serverlmswidget.cpp +++ b/ServerLMS/serverlmswidget.cpp @@ -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"); qRegisterMetaType("UserType"); + qRegisterMetaType("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) { // В случае получения события изменения языка приложения diff --git a/ServerLMS/serverlmswidget.h b/ServerLMS/serverlmswidget.h index cae2965..77b8357 100644 --- a/ServerLMS/serverlmswidget.h +++ b/ServerLMS/serverlmswidget.h @@ -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; diff --git a/ServerLMS/serverlmswidget.ui b/ServerLMS/serverlmswidget.ui index db46443..3b14ed6 100644 --- a/ServerLMS/serverlmswidget.ui +++ b/ServerLMS/serverlmswidget.ui @@ -43,18 +43,9 @@ - - - - 0 - 0 - - - - - 0 - 200 - + + + true