Files
Qt/portConnectClient/forwardsender.cpp
2020-06-26 11:01:32 +02:00

84 lines
2.1 KiB
C++

#include "forwardsender.h"
ForwardSender::ForwardSender()
: TransmittedBytes(0), socketFrom(-1), socketTo(-1)
{
qDebug(" +ForwardSender");
//timerID = this->startTimer(100);
//if(timerID == 0) {
// perror("Could not start Timer");
//}
}
ForwardSender::~ForwardSender()
{
//killTimer(timerID);
this->stopLoop();
if(this->isRunning()) {
this->quit();
if( ! this->wait(500) ) {
this->terminate();
if( ! this->wait(3000) )
std::cout << " Terminating Thread timeouted: " << __func__ << std::endl;
}
}
qDebug(" ~ForwardSender");
}
/*
void ForwardSender::timerEvent(QTimerEvent *)
{
qDebug("%s", ("Trasmitted: " + QString::number(TransmittedBytes)).toStdString().c_str());
emit transmittedBytes(vector_index, isSendingToRecirectServer, TransmittedBytes);
TransmittedBytes = 0;
}
*/
int ForwardSender::startRedirecting(int Socketfrom, int SocketTo, int vector_index, bool isSendingToRecirectServer)
{
if(this->isRunning())
return -1;
this->socketFrom = Socketfrom;
this->socketTo = SocketTo;
this->vector_index = vector_index;
this->isSendingToRecirectServer = isSendingToRecirectServer;
this->start();
return (this->isRunning()) ? 0 : 1;
}
void ForwardSender::stopLoop()
{
shoudStop = true;
}
void ForwardSender::run()
{
qDebug(" -> ForwardSender::run()");
shoudStop = false;
char buffer;
while ( !shoudStop ) {
if( read( socketFrom, &buffer, 1) <= 0 ) {
std::cerr << " DEBUG: read() failed." << std::endl;
return emit errorOccurred( (isSendingToRecirectServer) ? ERROR_LIST::RECV_FROM_LOCAL_SERVER_FAILED : ERROR_LIST::RECV_FROM_REDIRECT_SERVER_FAILED, vector_index );
} else if ( write(socketTo, &buffer, 1) <= 0) {
std::cerr << " DEBUG: write() failed." << std::endl;
return emit errorOccurred( (isSendingToRecirectServer) ? ERROR_LIST::SEND_TO_REDIRECT_SERVER_FAILED : ERROR_LIST::SEND_TO_LOCAL_SERVER_FAILED, vector_index );
}
TransmittedBytes++;
}
}