diff --git a/.gitignore b/.gitignore
index eefcdf9..88c83df 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,4 +33,5 @@
# Qt Creator User Project Files
/*.pro.user*
+/src/helpmessagesender/HelpMessageSender.pro.user*
*.eccba64
diff --git a/src/helpmessagesender/helpmessagewindow.cpp b/src/helpmessagesender/helpmessagewindow.cpp
index fc11fa4..ffa80cb 100644
--- a/src/helpmessagesender/helpmessagewindow.cpp
+++ b/src/helpmessagesender/helpmessagewindow.cpp
@@ -1,107 +1,171 @@
+/*
+ * Copyright 2014-2020 Markus Prasser
+ *
+ * This file is part of Labcontrol.
+ *
+ * Labcontrol is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Labcontrol is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Labcontrol. If not, see .
+ */
+
#include "helpmessagewindow.h"
+#include "ui_helpmessagewindow.h"
+
+#include
+#include
+#include
+#include
#include
-lcHelpMessageWindow::lcHelpMessageWindow( const QString &argServerIP, const unsigned short int &argServerPort, QWidget *argParent ) :
- QMainWindow{ argParent },
- helpMessageSocket { new QTcpSocket{ this } },
- serverPort{ argServerPort },
- serverAddress{ argServerIP },
- ui{ new Ui::HelpMessageWindow }
-{
- ui->setupUi( this );
- connect( ui->PBAskForHelp, &QPushButton::clicked, this, &lcHelpMessageWindow::RequestHelp );
- connect( helpMessageSocket, &QTcpSocket::readyRead, this, &lcHelpMessageWindow::ReadHelpReply );
- connect( helpMessageSocket, SIGNAL( error( QAbstractSocket::SocketError ) ),
- this, SLOT( DisplayError( QAbstractSocket::SocketError ) ) );
-
- QNetworkConfigurationManager manager;
- if ( manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired ) {
- // Get saved network configuration
- QSettings settings{ QSettings::UserScope, QLatin1String{ "QtProject" } };
- settings.beginGroup( QLatin1String{ "QtNetwork" } );
- const QString id = settings.value( QLatin1String{ "DefaultNetworkConfiguration" } ).toString();
- settings.endGroup();
-
- // If the saved network configuration is not currently discovered use the system default
- QNetworkConfiguration config = manager.configurationFromIdentifier( id );
- if ( ( config.state() & QNetworkConfiguration::Discovered ) != QNetworkConfiguration::Discovered ) {
- config = manager.defaultConfiguration();
- }
-
- networkSession = new QNetworkSession{ config, this };
- connect( networkSession, &QNetworkSession::opened, this, &lcHelpMessageWindow::OpenedSession );
-
- networkSession->open();
+lc::HelpMessageWindow::HelpMessageWindow(const QString &argServerIP,
+ const uint16_t argServerPort,
+ QWidget *argParent)
+ : QMainWindow{argParent}, helpMessageSocket{new QTcpSocket{this}},
+
+ serverAddress{argServerIP},
+ serverPort{argServerPort}, ui{new Ui::HelpMessageWindow} {
+ ui->setupUi(this);
+
+ connect(ui->PBAskForHelp, &QPushButton::clicked, this,
+ &lc::HelpMessageWindow::RequestHelp);
+ connect(helpMessageSocket, &QTcpSocket::readyRead, this,
+ &lc::HelpMessageWindow::ReadHelpReply);
+ connect(helpMessageSocket,
+ static_cast(
+ &QAbstractSocket::error),
+ this, &HelpMessageWindow::DisplayError);
+
+ QNetworkConfigurationManager manager;
+ if (manager.capabilities() &
+ QNetworkConfigurationManager::NetworkSessionRequired) {
+ // Get saved network configuration
+ QSettings settings{QSettings::UserScope, QLatin1String{"QtProject"}};
+ settings.beginGroup(QLatin1String{"QtNetwork"});
+ const QString id =
+ settings.value(QLatin1String{"DefaultNetworkConfiguration"}).toString();
+ settings.endGroup();
+
+ // If the saved network configuration is not currently discovered use the
+ // system default
+ QNetworkConfiguration config = manager.configurationFromIdentifier(id);
+ if ((config.state() & QNetworkConfiguration::Discovered) !=
+ QNetworkConfiguration::Discovered) {
+ config = manager.defaultConfiguration();
}
-}
-lcHelpMessageWindow::~lcHelpMessageWindow() {
- delete ui;
-}
+ networkSession = new QNetworkSession{config, this};
+ connect(networkSession, &QNetworkSession::opened, this,
+ &lc::HelpMessageWindow::OpenedSession);
-void lcHelpMessageWindow::DisplayError( QAbstractSocket::SocketError socketError ) {
- QString errorMessage;
- switch ( socketError ) {
- case QAbstractSocket::RemoteHostClosedError:
- return;
- case QAbstractSocket::HostNotFoundError:
- errorMessage = tr( "An error occurred: The server could not be found for error reporting:\n" );
- break;
- case QAbstractSocket::ConnectionRefusedError:
- errorMessage = tr( "An error occurred: The connection was refused by the laboratory server:\n" );
- break;
- default:
- errorMessage = tr( "The following error occured:\n" );
- }
- errorMessage.append( tr("%1").arg( helpMessageSocket->errorString() ) );
- errorMessage.append( "\n\nPlease raise your hand to notify the experimenters." );
- ui->LSendingSuccess->setText( errorMessage );
+ networkSession->open();
+ }
}
-void lcHelpMessageWindow::OpenedSession() {
- // Save the used configuration
- QNetworkConfiguration config = networkSession->configuration();
- QString id;
- if ( config.type() == QNetworkConfiguration::UserChoice )
- id = networkSession->sessionProperty( QLatin1String{ "UserChoiceConfiguration" } ).toString();
- else
- id = config.identifier();
-
- QSettings settings{ QSettings::UserScope, QLatin1String{ "QtProject" } };
- settings.beginGroup( QLatin1String{ "QtNetwork" } );
- settings.setValue( QLatin1String{ "DefaultNetworkConfiguration" }, id );
- settings.endGroup();
+/*!
+ * \brief Destroy the HelpMessageWindow instance
+ */
+lc::HelpMessageWindow::~HelpMessageWindow() { delete ui; }
+
+/*!
+ * \brief Display an error message to the user if requesting help failed
+ *
+ * \param socketError The error that occurred upon requesting help
+ */
+void lc::HelpMessageWindow::DisplayError(
+ const QAbstractSocket::SocketError socketError) {
+ QString errorMessage;
+
+ switch (socketError) {
+ case QAbstractSocket::RemoteHostClosedError:
+ return;
+ case QAbstractSocket::HostNotFoundError:
+ errorMessage = tr("An error occurred: The server could not be found for "
+ "error reporting:\n");
+ break;
+ case QAbstractSocket::ConnectionRefusedError:
+ errorMessage = tr("An error occurred: The connection was refused by the "
+ "laboratory server:\n");
+ break;
+ default:
+ errorMessage = tr("The following error occured:\n");
+ }
+ errorMessage.append(tr("%1").arg(helpMessageSocket->errorString()));
+ errorMessage.append(
+ "\n\nPlease raise your hand to notify the experimenters.");
+
+ ui->LSendingSuccess->setText(errorMessage);
}
-void lcHelpMessageWindow::ReadHelpReply() {
- QDataStream in( helpMessageSocket );
- in.setVersion( QDataStream::Qt_5_2 );
-
- if ( blockSize == 0 ) {
- if ( helpMessageSocket->bytesAvailable() < ( int )sizeof( quint16 ) )
- return;
-
- in >> blockSize;
- }
+/*!
+ * \brief Handle the opening of a new QNetworkSession session
+ */
+void lc::HelpMessageWindow::OpenedSession() {
+ // Save the used configuration
+ QNetworkConfiguration config = networkSession->configuration();
+ QString id;
+ if (config.type() == QNetworkConfiguration::UserChoice)
+ id = networkSession
+ ->sessionProperty(QLatin1String{"UserChoiceConfiguration"})
+ .toString();
+ else
+ id = config.identifier();
+
+ QSettings settings{QSettings::UserScope, QLatin1String{"QtProject"}};
+ settings.beginGroup(QLatin1String{"QtNetwork"});
+ settings.setValue(QLatin1String{"DefaultNetworkConfiguration"}, id);
+ settings.endGroup();
+}
- if ( helpMessageSocket->bytesAvailable() < blockSize ) {
- return;
+/*!
+ * \brief Read help request reply from laboratory server and notify user
+ */
+void lc::HelpMessageWindow::ReadHelpReply() {
+ QDataStream in{helpMessageSocket};
+ in.setVersion(QDataStream::Qt_5_2);
+
+ if (blockSize == 0) {
+ if (helpMessageSocket->bytesAvailable() <
+ static_cast(sizeof(quint16))) {
+ return;
}
- QString serverAnswer;
- in >> serverAnswer;
-
- if ( serverAnswer == "Help demand retrieved." ) {
- ui->LSendingSuccess->setText( tr( "Help message successfully sent.\nPlease wait for the experimenter to show up at your booth." ) );
- ui->PBAskForHelp->setEnabled( false );
- } else {
- ui->LSendingSuccess->setText( tr( "An error occurred sending the help message. Please raise your arm.\n\n'%1'" ).arg( serverAnswer ) );
- }
+ in >> blockSize;
+ }
+
+ if (helpMessageSocket->bytesAvailable() < blockSize) {
+ return;
+ }
+
+ QString serverAnswer;
+ in >> serverAnswer;
+
+ if (serverAnswer == "Help demand retrieved.") {
+ ui->LSendingSuccess->setText(
+ tr("Help message successfully sent.\nPlease wait for the experimenter "
+ "to show up at your booth."));
+ ui->PBAskForHelp->setEnabled(false);
+ } else {
+ ui->LSendingSuccess->setText(tr("An error occurred sending the help "
+ "message. Please raise your arm.\n\n'%1'")
+ .arg(serverAnswer));
+ }
}
-void lcHelpMessageWindow::RequestHelp() {
- blockSize = 0;
- helpMessageSocket->abort();
- helpMessageSocket->connectToHost( serverAddress, serverPort );
+/*!
+ * \brief Request help from the laboratory server just by connecting to it
+ */
+void lc::HelpMessageWindow::RequestHelp() {
+ blockSize = 0;
+ helpMessageSocket->abort();
+ helpMessageSocket->connectToHost(serverAddress, serverPort);
}
diff --git a/src/helpmessagesender/helpmessagewindow.h b/src/helpmessagesender/helpmessagewindow.h
index 41cdc9d..cd0172a 100644
--- a/src/helpmessagesender/helpmessagewindow.h
+++ b/src/helpmessagesender/helpmessagewindow.h
@@ -1,37 +1,60 @@
+/*
+ * Copyright 2014-2020 Markus Prasser
+ *
+ * This file is part of Labcontrol.
+ *
+ * Labcontrol is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Labcontrol is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Labcontrol. If not, see .
+ */
+
#ifndef HELPMESSAGEWINDOW_H
#define HELPMESSAGEWINDOW_H
-#include "ui_helpmessagewindow.h"
-
+#include
#include
-#include
-#include
+
+class QNetworkSession;
+class QTcpSocket;
namespace Ui {
class HelpMessageWindow;
-}
+} // namespace Ui
-class lcHelpMessageWindow : public QMainWindow
-{
- Q_OBJECT
+namespace lc {
+
+class HelpMessageWindow : public QMainWindow {
+ Q_OBJECT
public:
- explicit lcHelpMessageWindow( const QString &argServerIP, const unsigned short int &argServerPort, QWidget *argParent = nullptr );
- ~lcHelpMessageWindow();
+ explicit HelpMessageWindow(const QString &argServerIP, uint16_t argServerPort,
+ QWidget *argParent = nullptr);
+ ~HelpMessageWindow() override;
private:
- quint16 blockSize = 0;
- QTcpSocket *helpMessageSocket = nullptr;
- QNetworkSession *networkSession = nullptr;
- const quint16 serverPort = 0;
- const QHostAddress serverAddress;
- Ui::HelpMessageWindow *ui;
+ quint16 blockSize = 0;
+ QTcpSocket *const helpMessageSocket = nullptr;
+ QNetworkSession *networkSession = nullptr;
+ const QString serverAddress;
+ const quint16 serverPort = 0;
+ Ui::HelpMessageWindow *const ui = nullptr;
private slots:
- void RequestHelp();
- void ReadHelpReply();
- void DisplayError( QAbstractSocket::SocketError socketError );
- void OpenedSession();
+ void DisplayError(QAbstractSocket::SocketError socketError);
+ void OpenedSession();
+ void ReadHelpReply();
+ void RequestHelp();
};
+} // namespace lc
+
#endif // HELPMESSAGEWINDOW_H
diff --git a/src/helpmessagesender/helpmessagewindow.ui b/src/helpmessagesender/helpmessagewindow.ui
index 734ec84..52384c0 100644
--- a/src/helpmessagesender/helpmessagewindow.ui
+++ b/src/helpmessagesender/helpmessagewindow.ui
@@ -2,14 +2,6 @@
HelpMessageWindow
-
-
- 0
- 0
- 512
- 192
-
-
512
@@ -58,15 +50,15 @@
PBQuit
clicked()
HelpMessageWindow
- deleteLater()
+ close()
191
105
- 191
- 63
+ 255
+ 95
diff --git a/src/helpmessagesender/main.cpp b/src/helpmessagesender/main.cpp
index a0991dd..791241e 100644
--- a/src/helpmessagesender/main.cpp
+++ b/src/helpmessagesender/main.cpp
@@ -1,12 +1,49 @@
+/*
+ * Copyright 2014-2020 Markus Prasser
+ *
+ * This file is part of Labcontrol.
+ *
+ * Labcontrol is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Labcontrol is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Labcontrol. If not, see .
+ */
+
#include "helpmessagewindow.h"
+
#include
+#include
+#include
+
+int main(int argc, char *argv[]) {
+ QApplication a{argc, argv};
+ QSettings labSettings{"Labcontrol", "Labclient"};
+
+ const auto serverIP{labSettings.value("server_ip").toString()};
+ if (serverIP.isEmpty()) {
+ qDebug() << "Invalid laboratory server ip \"" + serverIP + "\" given";
+ return 1;
+ }
+
+ const auto serverPortStr{labSettings.value("server_port").toString()};
+ bool convSuccess = false;
+ const auto serverPort = serverPortStr.toUInt(&convSuccess);
+ if ((false == convSuccess) || ((serverPort < 1) || (serverPort > 65535))) {
+ qDebug() << "Invalid laboratory server port \"" + serverPortStr +
+ "\" given";
+ return 2;
+ }
-int main( int argc, char *argv[] )
-{
- QApplication a( argc, argv );
- QSettings labSettings{ "Economic Laboratory", "Labcontrol" };
- lcHelpMessageWindow w{ labSettings.value( "server_ip", "127.0.0.1" ).toString(), labSettings.value( "client_help_server_port", "0" ).toUInt() };
- w.show();
+ lc::HelpMessageWindow w{serverIP, static_cast(serverPort)};
+ w.show();
- return a.exec();
+ return a.exec();
}