summaryrefslogtreecommitdiffstats
path: root/src/server/serverapp
diff options
context:
space:
mode:
authorChristian Klinger2016-09-30 12:02:38 +0200
committerChristian Klinger2016-09-30 12:02:38 +0200
commit877607b07f30cbb8d7d8d06b1b91383095fdc144 (patch)
tree4c2ca41db4b9caa8e6c370237771d58bd99d7f13 /src/server/serverapp
parentadded a pre-commit hook for astyle. (diff)
downloadpvs2-877607b07f30cbb8d7d8d06b1b91383095fdc144.tar.gz
pvs2-877607b07f30cbb8d7d8d06b1b91383095fdc144.tar.xz
pvs2-877607b07f30cbb8d7d8d06b1b91383095fdc144.zip
refactoring.
Diffstat (limited to 'src/server/serverapp')
-rw-r--r--src/server/serverapp/serverapp.cpp91
-rw-r--r--src/server/serverapp/serverapp.h87
2 files changed, 178 insertions, 0 deletions
diff --git a/src/server/serverapp/serverapp.cpp b/src/server/serverapp/serverapp.cpp
new file mode 100644
index 0000000..8ad896f
--- /dev/null
+++ b/src/server/serverapp/serverapp.cpp
@@ -0,0 +1,91 @@
+#include <QTranslator>
+
+
+#include "serverapp.h"
+
+ServerApp::ServerApp(int& argc, char** argv)
+ : QApplication(argc, argv)
+{
+ setOrganizationName("openslx");
+ setOrganizationDomain("openslx.org");
+ setApplicationName("pvsmgr");
+
+ _arguments = parseParameters();
+
+ /* use system locale as language to translate gui */
+ QTranslator translator;
+ translator.load(":pvsmgr");
+ installTranslator(&translator);
+
+ /* Set the global path of the settings */
+ QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, "/opt/");
+ QSharedPointer<QSettings> sys = getSettings();
+ qDebug() << "System settings are in:" << sys->fileName();
+ QFileInfo sysfi(sys->fileName());
+
+ _mainWindow = new MainWindow();
+
+}
+
+QStringList ServerApp::parseParameters()
+{
+ QStringList rest;
+ for (QString a : arguments()) {
+ if (a == "--manager-only") {
+ _manager_only = true;
+ break;
+ } else if (a.startsWith("--config=")) {
+ _iniPath = a.mid(9);
+ } else {
+ rest << a;
+ }
+ }
+ return rest;
+
+}
+
+QStringList ServerApp::arguments()
+{
+ return _arguments;
+}
+
+const Room* ServerApp::getCurrentRoom()
+{
+ if (_rooms.contains(_currentRoom)) {
+ return _rooms[_currentRoom];
+ } else {
+ static Room* defaultRoom = NULL;
+ if (defaultRoom == NULL) {
+ defaultRoom = new Room(QMap<QString,
+ QPoint>(), QSize(8, 6), QSize(1, 1), "", "");
+ }
+ return defaultRoom;
+ }
+}
+void ServerApp::setSessionName(const QString& name)
+{
+ _sessionName = name;
+ _sessionNameArray = name.toUtf8();
+}
+
+void ServerApp::setSessionName()
+{
+ const QString name = QString::number(qrand() % 9000 + 1000);
+ _sessionName = name;
+ _sessionNameArray = name.toUtf8();
+}
+
+QSharedPointer<QSettings> ServerApp::getSettings()
+{
+ QSharedPointer<QSettings> set;
+ if (_iniPath == "") {
+ /* default location (system scope) */
+ set = QSharedPointer<QSettings>(new QSettings(QSettings::IniFormat, QSettings::SystemScope, "openslx/pvs2", "pvs2"));
+ } else {
+ /* use _iniPath to find ini file */
+ set = QSharedPointer<QSettings>(new QSettings(_iniPath, QSettings::IniFormat));
+ }
+ set->setIniCodec("UTF-8");
+ return set;
+}
+
diff --git a/src/server/serverapp/serverapp.h b/src/server/serverapp/serverapp.h
new file mode 100644
index 0000000..be6b0ab
--- /dev/null
+++ b/src/server/serverapp/serverapp.h
@@ -0,0 +1,87 @@
+#ifndef SERVERAPP_H
+#define SERVERAPP_H
+
+#include <QApplication>
+#include <QStringList>
+#include <QMap>
+
+#include "../mainwindow/mainwindow.h"
+
+struct Room {
+ Room(QMap<QString, QPoint> cPos, QSize grid, QSize client, QString image, QString tutor) :
+ clientPositions(cPos),
+ gridSize(grid),
+ clientSize(client),
+ imagePath(image),
+ tutorIP(tutor) {};
+ QMap<QString, QPoint> clientPositions;
+ QSize gridSize;
+ QSize clientSize;
+ QString imagePath;
+ QString tutorIP;
+};
+
+
+/* define a macro `serverApp` that can be used anywhere in the program and
+ * returns a reference to the current ClientApp instance */
+
+#if defined(serverApp)
+#undef serverApp
+#endif
+#define serverApp (static_cast<ServerApp*>(QCoreApplication::instance()))
+
+/* this class is supposed to (after complete refactoring) to encapsulate all
+ * state of the application. At the moment, the state is distributed within
+ * several widgets. With this class information access will also be easier as
+ * it is possible to access the current ServerApp instance from anywhere with
+ * the serverApp macro (like qApp) */
+class ServerApp : public QApplication
+{
+
+ Q_OBJECT
+
+private:
+ QStringList _arguments;
+ QStringList parseParameters();
+ MainWindow* _mainWindow;
+
+ QString _sessionName;
+ QByteArray _sessionNameArray;
+ QMap<QString, Room*> _rooms;
+ QString _currentRoom;
+
+ bool _manager_only;
+ bool _isExam;
+ QString _iniPath;
+
+public:
+
+ ServerApp(int& argc, char** argv);
+
+ virtual QStringList arguments();
+
+
+ /* getters */
+ const QString& sessionName() { return _sessionName; }
+ const QByteArray& sessionNameArray() { return _sessionNameArray; }
+ const QMap<QString, Room*> & rooms() { return _rooms; }
+ const QString& getCurrentRoomName() { return _currentRoom; }
+ const QMap<QString, Room*>& getRooms() { return _rooms; }
+ bool isExam() { return _isExam; }
+ bool isManagerOnly() { return _manager_only; }
+ const Room* getCurrentRoom();
+
+ /* setters */
+ void setSessionName(const QString& name);
+ void setSessionName();
+ void setRooms(const QMap<QString, Room*> & roomList) { _rooms = roomList; }
+ void setIniPath(QString s) { _iniPath = s; };
+ void setCurrentRoom(const QString& room) { _currentRoom = room; }
+ void setExam(bool exam) { _isExam = exam; }
+
+ QSharedPointer<QSettings> getSettings();
+
+
+};
+
+#endif