Files
RRJClient/Core/tcpclient.cpp
2025-01-20 10:58:46 +03:00

187 lines
4.6 KiB
C++

#include "tcpclient.h"
#include "updatecontroller.h"
#include "externalexecuter.h"
#include <QDir>
TCPClient::TCPClient(QObject *parent) :
QObject(parent)
{
socket = NULL;
}
void TCPClient::initialize(RecognizeSystem *recognize,ExternalExecuter *externalExecuter)
{
this->recognizeSystem = recognize;
this->externalExecuter = externalExecuter;
emit sigSendDebugLog(Tools::getTime() + " Client started");
}
void TCPClient::setConnect(ServerSettings *serverSettings)
{
if (socket != NULL && socket->state() == QTcpSocket::ConnectedState)
{
emit sigSendDebugLog("already connected");
return;
}
socket = new QTcpSocket(this);
connect(socket,&QTcpSocket::readyRead,this,&TCPClient::slotReadyRead,Qt::DirectConnection);
connect(socket,&QTcpSocket::disconnected,this,&TCPClient::setDisconnect);
connect(this,&TCPClient::sigRecognize,recognizeSystem,&RecognizeSystem::recognize,Qt::DirectConnection);
socket->connectToHost(serverSettings->Address,serverSettings->Port.toShort());
emit sigSendDebugLog("Try connect...");
socket->waitForReadyRead();
if(socket->state() != QTcpSocket::ConnectedState){
emit sigSendDebugLog("Connect invalid");
emit sigConnectionState(false);
return;
}else{
emit sigSendDebugLog("Connect complete");
emit sigConnectionState(true);
}
}
void TCPClient::sendClientAutorization()
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
if(socket->state() != QTcpSocket::ConnectedState){
emit sigConnectionState(false);
return;
}
QFile file(tempName);
file.open(QIODevice::ReadOnly);
QByteArray array = file.readAll();
stream << PacketType::TYPE_XMLANSWER;
stream << array;
socket->waitForBytesWritten();
}
void TCPClient::sendFile()
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
quint64 fileSize = 0;
int countSend = 0;
QFile file(hashFilename); //Открываем файл для чтения
stream << PacketType::TYPE_FILE; //Отправляем тип блока
QFileInfo fileInfo(file);
fileSize = fileInfo.size();
stream << fileSize;
if(file.open(QFile::ReadOnly | QFile::Text)){
while(!file.atEnd()){
QByteArray data = file.readAll();//file.read(1025*250);
stream << data;
countSend++;
}
qDebug() << Tools::getTime() << "count end Final: " << countSend;
}
file.close();
qDebug() << "Transaction after send file: " << socket->isTransactionStarted();
countSend = 0;
}
void TCPClient::sendUnityConnect()
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << PacketType::TYPE_CHANGEPACKAGERESPONSE;
socket->waitForBytesWritten();
}
void TCPClient::setDisconnect()
{
socket->disconnect();
emit sigSendDebugLog("Server disabled");
}
void TCPClient::sendDisable()
{
// QDataStream stream(socket);
// stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
// QByteArray data;
// data = emit sigGetXmlAnswer("END");
// stream << PacketType::TYPE_XMLANSWER;
// stream << data;
// socket->waitForBytesWritten();
}
void TCPClient::waitRead(int time)
{
socket->waitForReadyRead(time);
}
QTcpSocket *TCPClient::getSocket()
{
return socket;
}
void TCPClient::slotMessageEntered(QString message)
{
QDataStream stream(socket);
QByteArray data;
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
if(!message.isEmpty() && socket->state() == QTcpSocket::ConnectedState){
if(message == "check")
{
stream << PacketType::TYPE_COMMAND;
stream << message;
socket->waitForBytesWritten();
sendFile();
emit sigSendDebugLog(Tools::getTime() + " Local checkFile sended");
socket->waitForReadyRead(1000);
}
else if(message == "update"){
emit sigSendDebugLog("Update started");
stream << PacketType::TYPE_COMMAND;
stream << message;
socket->waitForBytesWritten();
}
else if(message == "run"){
externalExecuter->callApp();
}
}else{
emit sigSendDebugLog("WRONG SOCKET AFTER ENTERED");
}
}
void TCPClient::slotReadyRead()
{
if(!socket){
emit sigSendDebugLog("WRONG SOCKET");
return;
}
// qDebug() << "Transaction before recognize: " << socket->isTransactionStarted();
// if(socket->isTransactionStarted()) return;
emit sigRecognize(socket);
}
TCPClient::~TCPClient()
{
}