From 1eb21546673535f5707aa6346e8c749b928cd772 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Tue, 21 Oct 2008 16:44:33 +0200 Subject: [PATCH] Monolithic build features now zero setup configuration: click and run In Monolithic build only starts listening over tcp if a port is passed via cmd line. --- src/common/signalproxy.cpp | 1 - src/core/core.cpp | 52 +++++++++++++++++++++++++++++------- src/core/core.h | 5 ++-- src/qtui/monoapplication.cpp | 9 +++++++ 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index 0357c962..4308d8a8 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -389,7 +389,6 @@ void SignalProxy::removePeer(QObject* dev) { proxy->removePeer(this); } - if(dev->parent() == this) dev->deleteLater(); diff --git a/src/core/core.cpp b/src/core/core.cpp index 9c41b560..bf611aa9 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -139,9 +139,22 @@ void Core::restoreState() { } /*** Core Setup ***/ +QString Core::setupCoreForInternalUsage() { + Q_ASSERT(!_storageBackends.isEmpty()); + QVariantMap setupData; + qsrand(QDateTime::currentDateTime().toTime_t()); + int pass = 0; + for(int i = 0; i < 10; i++) { + pass *= 10; + pass += qrand() % 10; + } + setupData["AdminUser"] = "AdminUser"; + setupData["AdminPasswd"] = QString::number(pass); + setupData["Backend"] = _storageBackends[_storageBackends.keys().first()]->displayName(); + return setupCore(setupData); +} -QString Core::setupCore(const QVariant &setupData_) { - QVariantMap setupData = setupData_.toMap(); +QString Core::setupCore(QVariantMap setupData) { QString user = setupData.take("AdminUser").toString(); QString password = setupData.take("AdminPasswd").toString(); if(user.isEmpty() || password.isEmpty()) { @@ -343,6 +356,10 @@ QHash Core::bufferLastSeenMsgIds(UserId user) { /*** Network Management ***/ bool Core::startListening() { + // in mono mode we only start a local port if a port is specified in the cli call + if(Quassel::runMode() == Quassel::Monolithic && !Quassel::isOptionSet("port")) + return true; + bool success = false; uint port = Quassel::optionValue("port").toUInt(); @@ -364,10 +381,22 @@ bool Core::startListening() { return success; } -void Core::stopListening() { - _server.close(); - _v6server.close(); - quInfo() << "No longer listening for GUI clients."; +void Core::stopListening(const QString &reason) { + bool wasListening = false; + if(_server.isListening()) { + wasListening = true; + _server.close(); + } + if(_v6server.isListening()) { + wasListening = true; + _v6server.close(); + } + if(wasListening) { + if(reason.isEmpty()) + quInfo() << "No longer listening for GUI clients."; + else + quInfo() << qPrintable(reason); + } } void Core::incomingConnection() { @@ -384,9 +413,7 @@ void Core::incomingConnection() { quInfo() << qPrintable(tr("Client connected from")) << qPrintable(socket->peerAddress().toString()); if(!configured) { - _server.close(); - _v6server.close(); - quDebug() << "Closing server for basic setup."; + stopListening(tr("Closing server for basic setup.")); } } } @@ -506,7 +533,7 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { } if(msg["MsgType"] == "CoreSetupData") { QVariantMap reply; - QString result = setupCore(msg["SetupData"]); + QString result = setupCore(msg["SetupData"].toMap()); if(!result.isEmpty()) { reply["MsgType"] = "CoreSetupReject"; reply["Error"] = result; @@ -593,6 +620,11 @@ void Core::setupClientSession(QTcpSocket *socket, UserId uid) { } void Core::setupInternalClientSession(SignalProxy *proxy) { + if(!configured) { + stopListening(); + setupCoreForInternalUsage(); + } + UserId uid = 3; // FIXME!!!11 // Find or create session for validated user SessionThread *sess; diff --git a/src/core/core.h b/src/core/core.h index c38129a6..a2a15ae4 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -299,7 +299,7 @@ class Core : public QObject { private slots: bool startListening(); - void stopListening(); + void stopListening(const QString &msg = QString()); void incomingConnection(); void clientHasData(); void clientDisconnected(); @@ -321,7 +321,8 @@ class Core : public QObject { void setupClientSession(QTcpSocket *socket, UserId uid); void processClientMessage(QTcpSocket *socket, const QVariantMap &msg); //void processCoreSetup(QTcpSocket *socket, QVariantMap &msg); - QString setupCore(const QVariant &setupData); + QString setupCoreForInternalUsage(); + QString setupCore(QVariantMap setupData); bool registerStorageBackend(Storage *); void unregisterStorageBackend(Storage *); diff --git a/src/qtui/monoapplication.cpp b/src/qtui/monoapplication.cpp index b6280793..a63ec558 100644 --- a/src/qtui/monoapplication.cpp +++ b/src/qtui/monoapplication.cpp @@ -34,6 +34,14 @@ MonolithicApplication::MonolithicApplication(int &argc, char **argv) } bool MonolithicApplication::init() { + if(!Quassel::init()) // parse args + return false; + + if(isOptionSet("port")) { + _internal->init(); + _internalInitDone = true; + } + connect(Client::instance(), SIGNAL(newClientSyncer(ClientSyncer *)), this, SLOT(newClientSyncer(ClientSyncer *))); return QtUiApplication::init(); } @@ -51,6 +59,7 @@ void MonolithicApplication::newClientSyncer(ClientSyncer *syncer) { void MonolithicApplication::startInternalCore() { if(!_internalInitDone) { _internal->init(); + _internalInitDone = true; } Core *core = Core::instance(); ClientSyncer *syncer = static_cast(sender()); -- 2.20.1