Files
qt5-legatus-legacy/Lts/Proxies/DifferentialGPS/Simulator/main_sim.cpp
T
2026-08-13 18:33:10 +02:00

125 lines
2.7 KiB
C++
Executable File

/**
* $Id$
* $HeadURL$
* $Author$
*/
#include <QCoreApplication>
#include <QStringList>
#include <QTcpSocket>
#include <QTimer>
#include <QDebug>
#include "main_sim.h"
//
// PayloadSender
//
PayloadSender::PayloadSender(int numByte, int ctrFail, QTcpSocket *s, QObject *parent)
: QObject(parent)
, m_socket(s)
, m_timer(new QTimer(this))
, m_char('1')
, m_numByte(numByte)
, m_ctrFail(ctrFail)
{
m_timer->setInterval(10 * 1000); // 10s
m_timer->setSingleShot(false);
m_timer->start();
connect(m_timer, &QTimer::timeout,
this, &PayloadSender::onTimeout);
}
PayloadSender::~PayloadSender()
{
if (m_socket->state() != QAbstractSocket::UnconnectedState)
{
m_socket->disconnectFromHost();
m_socket->waitForDisconnected(2000);
}
delete m_socket;
delete m_timer;
}
void PayloadSender::onTimeout()
{
static int ctrFail = 0;
ctrFail++;
bool failure = ((ctrFail >= m_ctrFail) && (ctrFail <= (m_ctrFail + 2)));
if (!failure)
{
qDebug() << "Sending data to socket " << m_socket << " content: 256 * 0x" << QString::number(m_char, 16);
QByteArray ba(m_numByte, m_char++);
m_socket->write(ba);
}
else
qDebug() << " +++ Failure: Sending data ";
}
//
// TcpTestServer
//
TcpTestServer::TcpTestServer(int numByte, int ctrFail, QObject *parent)
: QTcpServer(parent)
, m_numByte(numByte)
, m_ctrFail(ctrFail)
{
connect(this, &TcpTestServer::newConnection,
this, &TcpTestServer::onNewIncomingConnection);
}
TcpTestServer::~TcpTestServer()
{
qDeleteAll(m_openConnections);
}
void TcpTestServer::onNewIncomingConnection()
{
QTcpSocket *newSocket = nextPendingConnection();
if (!newSocket)
return;
PayloadSender *ps = new PayloadSender(m_numByte, m_ctrFail, newSocket, this);
connect(newSocket, &QTcpSocket::disconnected,
ps, &PayloadSender::deleteLater);
qDebug() << "Created new payload sender" << ps << "for socket " << newSocket;
m_openConnections += ps;
connect(ps, &PayloadSender::destroyed,
this, &TcpTestServer::onPayloadSenderDestroyed);
}
void TcpTestServer::onPayloadSenderDestroyed(QObject *obj)
{
qDebug() << "Payload sender " << obj << "destroyed";
m_openConnections -= obj;
}
//
// main
//
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
unsigned short port = 1234;
int numByte = 40;
int ctrFail = -10;
if (app.arguments().size() > 1) port = app.arguments().at(1).toInt();
if (app.arguments().size() > 2) numByte = app.arguments().at(2).toInt();
if (app.arguments().size() > 3) ctrFail = app.arguments().at(3).toInt();
TcpTestServer *srv = new TcpTestServer(numByte, ctrFail);
if (!srv->listen(QHostAddress::Any, port))
return 1;
int ret = app.exec();
delete srv;
return ret;
}