19 #include <QTextStream> 21 #include <QMessageBox> 27 #include <QIntValidator> 28 #include <QMessageBox> 30 #include <QNetworkDatagram> 32 #include "ui_udp_server.h" 40 ui->lineEditPort->setValidator(
new QIntValidator());
41 setWindowTitle(
"UDP Server");
43 connect(
ui->buttonBox, &QDialogButtonBox::accepted,
this, &QDialog::accept);
44 connect(
ui->buttonBox, &QDialogButtonBox::rejected,
this, &QDialog::reject);
48 while (
ui->layoutOptions->count() > 0)
50 auto item =
ui->layoutOptions->takeAt(0);
51 item->widget()->setParent(
nullptr);
55 Ui::UDPServerDialog*
ui;
76 QMessageBox::warning(
nullptr, tr(
"UDP Server"), tr(
"No available MessageParsers"),
88 dialog.
ui->comboBoxProtocol->addItem(it.first);
90 if (
auto widget = it.second->optionsWidget())
92 widget->setVisible(
false);
93 dialog.
ui->layoutOptions->addWidget(widget);
99 QString protocol = settings.value(
"UDP_Server::protocol",
"JSON").toString();
100 int port = settings.value(
"UDP_Server::port", 9870).toInt();
102 dialog.
ui->lineEditPort->setText(QString::number(port));
106 connect(dialog.
ui->comboBoxProtocol,
107 qOverload<const QString &>(&QComboBox::currentIndexChanged),
108 this, [&](
const QString & selected_protocol) {
111 if( auto prev_widget = parser_creator->optionsWidget())
113 prev_widget->setVisible(false);
118 if (
auto widget = parser_creator->optionsWidget())
120 widget->setVisible(
true);
124 dialog.ui->comboBoxProtocol->setCurrentText(protocol);
126 int res = dialog.exec();
127 if (res == QDialog::Rejected)
133 port = dialog.ui->lineEditPort->text().toUShort(&
ok);
134 protocol = dialog.ui->comboBoxProtocol->currentText();
139 settings.setValue(
"UDP_Server::protocol", protocol);
140 settings.setValue(
"UDP_Server::port", port);
149 qDebug() <<
"UDP listening on port" << port;
154 QMessageBox::warning(
nullptr, tr(
"UDP Server"),
155 tr(
"Couldn't bind UDP port %1").
arg(port), QMessageBox::Ok);
175 QNetworkDatagram datagram =
_udp_socket->receiveDatagram();
177 using namespace std::chrono;
178 auto ts = high_resolution_clock::now().time_since_epoch();
179 double timestamp = 1e-6 * double(duration_cast<microseconds>(ts).
count());
181 QByteArray m = datagram.data();
182 MessageRef msg(reinterpret_cast<uint8_t*>(m.data()), m.count());
186 std::lock_guard<std::mutex> lock(
mutex());
190 catch (std::exception& err)
192 QMessageBox::warning(
nullptr, tr(
"UDP Server"),
193 tr(
"Problem parsing the message. UDP Server will be " virtual ~UDP_Server() override
std::shared_ptr< ParserFactoryPlugin > Ptr
virtual void shutdown() override
shutdown Stop streaming
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
const ParserFactories * parserFactories() const
constexpr auto count() -> size_t
PlotDataMapRef & dataMap()
virtual bool start(QStringList *) override
start streaming.
PJ::MessageParserPtr _parser