/** * $Id$ * $HeadURL$ * $Author$ */ #include #include #include #include #include #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; }