Files
RRJClient/Core/tcpclient.cpp
2024-08-14 10:02:09 +03:00

101 lines
2.4 KiB
C++

#include "tcpclient.h"
#include "UpdateController.h"
#include "externalexecuter.h"
#include <QDir>
TCPClient::TCPClient(QObject *parent) :
QObject(parent)
{
socket = new QTcpSocket(this);
connect(socket,&QTcpSocket::readyRead,this,&TCPClient::onReadyRead);
}
void TCPClient::Initialize(UpdateController *updateController,
RecognizeSystem *recognize,
ExternalExecuter *externalExecuter)
{
this->updateController = updateController;
this->recognizeSystem = recognize;
this->externalExecuter = externalExecuter;
recognize->SetSocket(socket);
emit onSendDebugLog(Tools::GetTime() + " Client started");
}
void TCPClient::SetConnect(ServerSettings *serverSettings)
{
socket->connectToHost(serverSettings->Address,serverSettings->Port.toShort());
emit onSendDebugLog("Try connect...");
socket->waitForReadyRead();
if(socket->state() != QTcpSocket::ConnectedState){
emit onSendDebugLog("Connect invalid");
return;
}
}
void TCPClient::WaitWrites()
{
socket->waitForBytesWritten();
}
QTcpSocket *TCPClient::GetSocket()
{
return socket;
}
TCPClient::~TCPClient()
{
}
void TCPClient::onMessageEntered(QString message)
{
QDataStream stream(socket);
QByteArray data;
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
if(!message.isEmpty() && socket->state() == QTcpSocket::ConnectedState){
socket->waitForBytesWritten();
if(message == "check")
{
stream << PacketType::TYPE_COMMAND;
stream << message;
socket->waitForBytesWritten();
updateController->SendFile(stream);
emit onSendDebugLog(Tools::GetTime() + " Local checkFile sended");
WaitWrites();
socket->readyRead();
}
else if(message == "update"){
emit onSendDebugLog("Update started");
stream << PacketType::TYPE_COMMAND;
stream << message;
socket->waitForBytesWritten();
}
else if(message == "run"){
externalExecuter->CallApp();
}
}else{
emit onSendDebugLog("WRONG SOCKET AFTER ENTERED");
}
}
void TCPClient::onReadyRead()
{
if(!socket){
emit onSendDebugLog("WRONG SOCKET");
return;
}
//возврат на случай недоступного сокета
recognizeSystem->Recognize();
}