mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
feat: add logger with write to file
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(".");
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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";//может вынести комманды куда нибудь?
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
// В случае получения события изменения языка приложения
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user