1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
#include "floatcomtcpsrv.h"
FloatComTcpSrv::FloatComTcpSrv()
{
qRegisterMetaType<QAbstractSocket::SocketError>("QAbstractSocket::SocketError" );
}
FloatComTcpSrv::~FloatComTcpSrv() {
if (mFloatServer)
delete(mFloatServer);
}
void FloatComTcpSrv::SrvSetting(QString pAdresse, int pPort)
{
mSrvAdresse = pAdresse;
mSrvPort = pPort;
qDebug() << "Config SrvTCP : adresse =" <<pAdresse << " port = "<< pPort;
}
void FloatComTcpSrv::Launch()
{
mFloatServer = new QTcpServer();
connect(mFloatServer, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
mFloatServer->listen(QHostAddress(mSrvAdresse), mSrvPort);
}
void FloatComTcpSrv::acceptConnection()
{
mFloatUser = mFloatServer->nextPendingConnection();
emit ConnectionState("connect");
//demarrage du timer
mTimerSocketNoData.start(60000);
// init du timer sur reception de data
connect(&mTimerSocketNoData, SIGNAL(timeout()), this, SLOT(Slot_clientDisconnected()));
connect(mFloatUser, SIGNAL(readyRead()), this, SLOT(startRead()));
connect(mFloatUser, SIGNAL( error( QAbstractSocket::SocketError ) ),
this, SLOT( erreurSocket( QAbstractSocket::SocketError ) ));
}
void FloatComTcpSrv::startRead()
{
QByteArray lReceiveData;
lReceiveData = mFloatUser->readAll();
mFloatUser->flush();
qDebug() << "STOP STOP STOP";
getchar();
// on redemarre le timer pour 1 minute
//mTimerSocketNoData.start(1000);
// emission du signal pour l'ihm
emit TransmitData(lReceiveData);
qDebug() << "Reception TRAME ACK TCP :: " << lReceiveData.toHex();
}
void FloatComTcpSrv::Slot_clientDisconnected()
{
qDebug() << "TIME OUT RESTART";
mFloatServer->close();
//mise en ecoute
mFloatServer->listen(QHostAddress(mSrvAdresse), mSrvPort);
}
void FloatComTcpSrv::erreurSocket(QAbstractSocket::SocketError pError)
{
switch( pError )
{
case QAbstractSocket::HostNotFoundError:
qDebug() << "Erreur : le serveur n'a pas pu etre trouve. Verifiez l'IP et le port.";
break;
case QAbstractSocket::ConnectionRefusedError:
qDebug() << "Erreur : le serveur a refuse la connexion ou n'est pas connecte.";
mTimerSocketNoData.start();
break;
case QAbstractSocket::RemoteHostClosedError:
qDebug() << "Erreur : le serveur a coupe la connexion.";
mTimerSocketNoData.start();
emit ConnectionState("disconnect");
break;
default:
qDebug() << "Erreur : " << mFloatUser->errorString();
}
} |
Partager