Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+124
@@ -0,0 +1,124 @@
|
||||
/**
|
||||
* $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;
|
||||
}
|
||||
Reference in new issue
Block a user