SimulatorDialog::SimulatorDialog(QWidget *parent) : QMainWindow(parent), ui(new Ui::SimulatorDialog), m_numRows(0), m_paused(false), controller() { ui->setupUi(this); ui->btnStart->setEnabled(false); ui->btnPause->setEnabled(false); ui->btnStop->setEnabled(false); ui->spinBox_port->setValue(controller.getPort()); connect(&controller, SIGNAL(readGeomessage(Geomessage)), this, SLOT(addGeomessageToTable(Geomessage))); connect(&controller, SIGNAL(advancedToGeomessage(int)), this, SLOT(selectGeomessageInTable(int))); }
SimulatorDialog::SimulatorDialog(bool isVerboseOutput, QWidget *parent) : QMainWindow(parent), ui(new Ui::SimulatorDialog), m_numRows(0), m_paused(false), controller() { controller.setVerbose(isVerboseOutput); ui->setupUi(this); setWindowTitle(windowTitle() + " " + SimulatorController::RELEASE); ui->btnStart->setEnabled(false); ui->btnPause->setEnabled(false); ui->btnStop->setEnabled(false); ui->spinBox_port->setValue(controller.getPort()); connect(&controller, SIGNAL(readGeomessage(Geomessage)), this, SLOT(addGeomessageToTable(Geomessage))); connect(&controller, SIGNAL(advancedToGeomessage(int)), this, SLOT(selectGeomessageInTable(int))); }
void SimulatorController::timerEvent(QTimerEvent *event) { if (event->timerId() == m_timer.timerId()) { QString payload; QString currentElementName; QString Name, messageID, messageAction, symbolID, type; QXmlStreamWriter streamWriter(&payload); QString currentTimeString = QDateTime::currentDateTimeUtc().toString(SimulatorController::DATE_FORMAT); streamWriter.writeStartElement(TAG_ROOT); for(int messageThroughput = 0 ; messageThroughput < m_messageThroughput ; messageThroughput++) { while (!m_inputReader.atEnd()) { if(QStringRef::compare(m_inputReader.name(), TAG_MESSAGES) == 0) { m_inputReader.readNext(); if(m_inputReader.atEnd()) { m_reachedEndOfFile=true; m_inputReader.clear(); m_inputFile.reset(); m_inputReader.setDevice(&m_inputFile); m_currentIndex = 0; } continue; } else if (m_inputReader.isEndElement()) { streamWriter.writeEndElement(); if(QStringRef::compare(m_inputReader.name(), TAG_MESSAGE) == 0) { //Only emit readGeomessage if this is the first time we have read the message... if (m_reachedEndOfFile == false) { emit readGeomessage(Geomessage(Name, messageID, messageAction, symbolID, type)); } //Only emit advancedToGeomessage when it's the last message in this set... if (messageThroughput + 1 == m_messageThroughput) { emit advancedToGeomessage(m_currentIndex); } m_currentIndex++; break; } m_inputReader.readNext(); } else if (m_inputReader.isStartElement()) { currentElementName = m_inputReader.name().toString(); if (m_inputReader.prefix().toString().isEmpty()) { streamWriter.writeStartElement(m_inputReader.name().toString()); } else { streamWriter.writeStartElement(m_inputReader.prefix().toString()+ ":" + m_inputReader.name().toString()); } if (m_inputReader.attributes().size() > 0) { streamWriter.writeAttributes(m_inputReader.attributes()); } } else if (m_inputReader.isCharacters()) { QString text = m_inputReader.text().toString(); { QMutexLocker locker(&timeOverrideFieldsMutex); if (m_timeOverrideFields.contains(currentElementName)) { text = currentTimeString; } } streamWriter.writeCharacters(text); if (TAG_NAME == currentElementName) { Name = text; } else if (TAG_ACTION == currentElementName) { messageAction = text; } else if (TAG_ID == currentElementName) { messageID = text; } else if (TAG_SIC == currentElementName) { symbolID = text; } else if (TAG_TYPE == currentElementName) { type = text; } } else if (m_inputReader.isComment()) { /* leave not import */ } else if (m_inputReader.isCDATA()) { /* take cdata */ } m_inputReader.readNext(); } m_inputReader.readNext(); } streamWriter.writeEndElement(); QByteArray datagram; datagram += payload; QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces(); for (int i = 0; i < ifaces.size(); i++) { QNetworkInterface::InterfaceFlags flags = ifaces[i].flags(); if (!(flags & QNetworkInterface::IsLoopBack) && (flags & QNetworkInterface::IsUp)) { QList<QNetworkAddressEntry> entries = ifaces[i].addressEntries(); for (int j = 0; j < entries.size(); j++) { m_udpSocket->writeDatagram(datagram.data(), datagram.size(), entries[j].broadcast(), getPort()); } } } if (verbose()) { consoleOut << payload << endl; } } else { QObject::timerEvent(event); } }