diff options
-rw-r--r-- | src/server/mainwindow/mainwindow.cpp | 78 | ||||
-rw-r--r-- | src/server/net/client.cpp | 2 | ||||
-rw-r--r-- | src/server/net/discoverylistener.cpp | 2 | ||||
-rw-r--r-- | src/server/util/global.cpp | 5 | ||||
-rw-r--r-- | src/server/util/global.h | 14 |
5 files changed, 58 insertions, 43 deletions
diff --git a/src/server/mainwindow/mainwindow.cpp b/src/server/mainwindow/mainwindow.cpp index a60d1a7..4963ccc 100644 --- a/src/server/mainwindow/mainwindow.cpp +++ b/src/server/mainwindow/mainwindow.cpp @@ -59,7 +59,7 @@ MainWindow::MainWindow(QString ipListUrl, QWidget* parent) : _mode = Mode::Multicast; _streamingSource = 0; - /* stupid default, just for testing */ + /* default value, these should be updated on loading a room */ _tilesX = 20; _tilesY = 20; @@ -142,11 +142,6 @@ MainWindow::MainWindow(QString ipListUrl, QWidget* parent) : this->onSessionNameUpdate(); // Just make lable visible. _countSessionNameUpdate = 0; - /* better calculate on demand */ -// _tileWidth = ui->frmRoom->size().width() / _tilesX; -// _tileHeight = ui->frmRoom->size().height() / _tilesY; - - tryToUseRoomTemplate(); } @@ -310,42 +305,54 @@ void MainWindow::tellClientCurrentSituation(Client* client) */ void MainWindow::tryToUseRoomTemplate() { - QMap<QString, QMap<QString, QPoint> > roomsList; + QMap<QString, Room* > roomsList; SYSTEM_SETTINGS(conf); - if (!conf.contains("rooms")) { - qDebug() << "Invalid config file!"; - return; - } + if (!conf.contains("rooms")) { qDebug() << "Invalid config file!"; return; } QStringList rooms = conf.value("rooms").toStringList(); qDebug() << rooms; - for (auto i : rooms) + for (QString roomName : rooms) { - qDebug() << "i: " << i; - conf.beginGroup(i); + qDebug() << "i: " << roomName; + conf.beginGroup(roomName); if (!conf.contains("mgrIP")) { qDebug() << "Invalid config file!"; return; } - + QMap<QString, QPoint> clientPositions; // First store all room configurations in _rooms. int size = conf.beginReadArray("client"); for (int j = 0; j < size; j++) { conf.setArrayIndex(j); // qDebug() << "ip: " << conf.value("ip").toString() << " pos: " << conf.value("pos").toPoint(); - roomsList[i].insert(conf.value("ip").toString(), conf.value("pos").toPoint()); + // roomsList[i].insert(conf.value("ip").toString(), conf.value("pos").toPoint()); + clientPositions.insert(conf.value("ip").toString(), conf.value("pos").toPoint()); } conf.endArray(); // Find the managerIP of current room. QString mgrIP = conf.value("mgrIP").toString(); + + QSize gridSize; + QSize clientSize(1,1); + /* read some other properties of the room */ + if (conf.contains("gridSize")) { + gridSize = conf.value("gridSize").toSize(); + qDebug() << "read gridSize: " << gridSize ; + } + if (conf.contains("clientSize")) { + clientSize = conf.value("clientSize").toSize(); + qDebug() << "read clientSize: " << clientSize; + } + + foreach (const QHostAddress &address, QNetworkInterface::allAddresses()) { if (address != QHostAddress(QHostAddress::LocalHost) && mgrIP == address.toString()) { qDebug("Found this ip in config."); - Global::setCurrentRoom(i); + Global::setCurrentRoom(roomName); int size = conf.beginReadArray("client"); for (int j = 0; j < size; ++j) { conf.setArrayIndex(j); @@ -377,6 +384,9 @@ void MainWindow::tryToUseRoomTemplate() } } conf.endGroup(); + + Room* r = new Room(clientPositions, gridSize, clientSize); + roomsList.insert(roomName, r); } Global::setRooms(roomsList); } @@ -472,16 +482,12 @@ void MainWindow::resizeEvent(QResizeEvent* e) const int nh = ui->frmRoom->size().height() / _tilesY; for (QList<ConnectionFrame*>::iterator it = _clientFrames.begin(); it != _clientFrames.end(); ++it) { - const QPoint &oldpos = (*it)->frameGeometry().topLeft(); int newPosX = (*it)->getGridPosition().x() * getTileWidthPx(); int newPosY = (*it)->getGridPosition().y() * getTileHeightPx(); QPoint newPos(newPosX, newPosY); - qDebug("Move C"); (*it)->setSize(getTileWidthPx(), getTileHeightPx()); (*it)->move(newPos); - //(*it)->move((oldpos.x() / getTileWidthPx()) * nw, (oldpos.y() / getTileHeightPx()) * nh); - //(*it)->setSize(nw, nh); } // Resize trash and set position. @@ -754,26 +760,28 @@ void MainWindow::onReloadRoomOk() _reloadWindow->hide(); - QMap<QString, QPoint> room = Global::getRooms()[roomToReload]; + Room *room = Global::getRooms()[roomToReload]; + bool gridSizeSet = false; /* TODO: read grid size from config */ + if (!gridSizeSet) { + /* collect the maximum coordinates */ + _tilesX = 0; + _tilesY = 0; - /* collect the maximum coordinates to resize the grid */ - _tilesX = 0; - _tilesY = 0; + for (QMap<QString, QPoint>::iterator it = room->clientPositions.begin(); it != room->clientPositions.end(); ++it) { + QPoint pos = it.value(); + if (pos.x() > _tilesX) { _tilesX = pos.x(); } + if (pos.y() > _tilesY) { _tilesY = pos.y(); } - for (QMap<QString, QPoint>::iterator it = room.begin(); it != room.end(); ++it) { - QPoint pos = it.value(); - if (pos.x() > _tilesX) { _tilesX = pos.x(); } - if (pos.y() > _tilesY) { _tilesY = pos.y(); } + } + /* need a little extra space */ + _tilesX += 1; + _tilesY += 1; } - /* need a little extra space */ - _tilesX += 1; - _tilesY += 1; - qDebug() << "New Grid Size: " << _tilesX << ", " << _tilesY << endl; // qDebug() << " Room: " << room; // qDebug() << "_rooms: " << _rooms; - for (QMap<QString, QPoint>::iterator it = room.begin(); it != room.end(); ++it) + for (QMap<QString, QPoint>::iterator it = room->clientPositions.begin(); it != room->clientPositions.end(); ++it) { QString computerId = it.key(); QPoint pos = it.value(); @@ -786,7 +794,7 @@ void MainWindow::onReloadRoomOk() QPoint pxPos(pos.x() * getTileWidthPx(), pos.y() * getTileHeightPx()); ConnectionFrame *cf = createFrame(computerId, pxPos, pos); - cf->move(cf->getCurrentPosition()); /* TODO: this affects the placement */ + cf->move(cf->getCurrentPosition()); onPlaceFrame(false, cf); } } diff --git a/src/server/net/client.cpp b/src/server/net/client.cpp index 029b88a..8a10cd8 100644 --- a/src/server/net/client.cpp +++ b/src/server/net/client.cpp @@ -255,7 +255,7 @@ void Client::handleMsg() QByteArray hash(_fromClient.getFieldBytes(_HASH)); QByteArray challenge(_fromClient.getFieldBytes(_CHALLENGE)); if (genSha1(&Global::sessionNameArray(), &_challenge) != hash - && !(Global::getRooms()[Global::getCurrentRoom()].contains(_socket->peerAddress().toString()))) + && !(Global::getRooms()[Global::getCurrentRoom()]->clientPositions.contains(_socket->peerAddress().toString()))) { // Challenge reply is invalid, drop client NetworkMessage msgErr; msgErr.buildErrorMessage("Challenge reply invalid."); diff --git a/src/server/net/discoverylistener.cpp b/src/server/net/discoverylistener.cpp index 58e877c..b532688 100644 --- a/src/server/net/discoverylistener.cpp +++ b/src/server/net/discoverylistener.cpp @@ -160,7 +160,7 @@ void DiscoveryListener::onReadyRead() continue; // If so, check if the submitted hash seems valid if (genSha1(&Global::sessionNameArray(), &salt1, &iplist) != hash && - !(Global::getRooms()[Global::getCurrentRoom()].contains(addr.toString()))) + !(Global::getRooms()[Global::getCurrentRoom()]->clientPositions.contains(addr.toString()))) { // did not match local session name and client is not in same room. continue; diff --git a/src/server/util/global.cpp b/src/server/util/global.cpp index 9a4c7c6..3021ca9 100644 --- a/src/server/util/global.cpp +++ b/src/server/util/global.cpp @@ -9,8 +9,7 @@ QString Global::_sessionName = QString(); QByteArray Global::_sessionNameArray = QByteArray(); -QMap<QString, QMap<QString, QPoint> > Global::_rooms = - QMap<QString, QMap<QString, QPoint> >(); +QMap<QString, Room*> Global::_rooms = QMap<QString, Room*>(); QString Global::_currentRoom = QString(); void Global::setSessionName(const QString& name) @@ -26,7 +25,7 @@ void Global::setSessionName() Global::_sessionNameArray = name.toUtf8(); } -void Global::setRooms(const QMap<QString, QMap<QString, QPoint> >& roomList) +void Global::setRooms(const QMap<QString, Room*>& roomList) { Global::_rooms = roomList; } diff --git a/src/server/util/global.h b/src/server/util/global.h index d4fed6c..a911fa3 100644 --- a/src/server/util/global.h +++ b/src/server/util/global.h @@ -13,8 +13,16 @@ #include <QMap> #include <QPair> #include <QPoint> +#include <QSize> #include <QList> +struct Room { + Room(QMap<QString, QPoint> cPos, QSize grid, QSize client) : clientPositions(cPos), gridSize(grid), clientSize(client) {}; + QMap<QString, QPoint> clientPositions; + QSize gridSize; + QSize clientSize; +}; + class Global { private: @@ -23,7 +31,7 @@ private: static QString _sessionName; static QByteArray _sessionNameArray; - static QMap<QString, QMap<QString, QPoint> > _rooms; + static QMap<QString, Room*> _rooms; static QString _currentRoom; public: @@ -32,8 +40,8 @@ public: static void setSessionName(const QString& name); static void setSessionName(); - static void setRooms(const QMap<QString, QMap<QString, QPoint> > & roomList); - static const QMap<QString, QMap<QString, QPoint> >& getRooms() { + static void setRooms(const QMap<QString, Room*> & roomList); + static const QMap<QString, Room*> & getRooms() { return _rooms; } |