#include "socketreader.h" #include #include #include #include #include namespace HighLevelArchitecture { SocketReader::SocketReader(QObject *parent) : QThread(parent) , m_socket(new QTcpSocket(this)) , m_hlaRequestIdentifier(0) .getNGLLogger("SocketReader")), m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger()) { } bool SocketReader::init(const QString &host, quint16 port, int hlaRequestIdentifier) { DEBUG_LOG(m_logger) << "SR " << hlaRequestIdentifier << ": Trying to establish connection to " << host << ":" << port; m_hlaRequestIdentifier = hlaRequestIdentifier; connect(m_socket, SIGNAL(readyRead()), this, SLOT(onReadyRead())); connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError))); m_socket->connectToHost(host, port, QIODevice::ReadOnly); return m_socket->waitForConnected(1000); } SocketReader::~SocketReader() { m_socket->disconnectFromHost(); if (m_socket->state() != QAbstractSocket::UnconnectedState && !m_socket->waitForDisconnected(1000)) m_socket->abort(); delete m_socket; m_socket = 0; } void SocketReader::onReadyRead() { DEBUG_LOG(m_logger) << "SR "<< m_hlaRequestIdentifier << ": Data received, transmitting"; QByteArray ba(m_socket->readAll()); TRACE_LOG(m_logger) << "SR "<< m_hlaRequestIdentifier << ": Data contents: " << ba.constData(); emit newData(ba, m_hlaRequestIdentifier); } void SocketReader::stopThread() { QTimer::singleShot(0, this, SLOT(quit())); while (!isFinished()) QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); deleteLater(); } void SocketReader::onSocketError(const QAbstractSocket::SocketError &error) { QString errorValue; QMetaObject meta = QAbstractSocket::staticMetaObject; for (int i=0; i < meta.enumeratorCount(); ++i) { QMetaEnum m = meta.enumerator(i); if (QString::fromLatin1(m.name()) == QLatin1String("SocketError")) { errorValue = QLatin1String(m.valueToKey(error)); break; } } ERROR_LOG(m_logger) << "SR "<< m_hlaRequestIdentifier << ": Socket Error: " << errorValue; } }