X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcore.cpp;h=f9bc84fad955138d435851f19a2097efd61ab780;hb=8836fdc8e4107437e5fff0e10e18d581297d59e4;hp=1df55da2b1e5ac9836f29b5d55f7c7e60e4cacde;hpb=d9398c1b8bfa66680d266bf968dc90f386c4ee7b;p=quassel.git diff --git a/src/core/core.cpp b/src/core/core.cpp index 1df55da2..f9bc84fa 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -43,7 +43,7 @@ void Core::destroy() { } Core::Core() { - qDebug() << "core"; + } void Core::init() { @@ -55,6 +55,8 @@ void Core::init() { connect(Global::instance(), SIGNAL(dataPutLocally(UserId, QString)), this, SLOT(updateGlobalData(UserId, QString))); connect(&server, SIGNAL(newConnection()), this, SLOT(incomingConnection())); //startListening(); // FIXME + guiUser = 0; + /* if(Global::runMode == Global::Monolithic) { // TODO Make GUI user configurable try { guiUser = storage->validateUser("Default", "password"); @@ -65,7 +67,7 @@ void Core::init() { Global::setGuiUser(guiUser); createSession(guiUser); } else guiUser = 0; - + */ // Read global settings from config file QSettings s; s.beginGroup("Global"); @@ -173,36 +175,53 @@ void Core::clientDisconnected() { // TODO remove unneeded sessions - if necessary/possible... } +QVariant Core::connectLocalClient(QString user, QString passwd) { + UserId uid = instance()->storage->validateUser(user, passwd); + QVariant reply = instance()->initSession(uid); + instance()->guiUser = uid; + Global::setGuiUser(uid); + qDebug() << "Local client connected."; + return reply; +} + +QVariant Core::disconnectLocalClient() { + qDebug() << "Local client disconnected."; + instance()->guiUser = 0; + Global::setGuiUser(0); +} + void Core::processClientInit(QTcpSocket *socket, const QVariant &v) { VarMap msg = v.toMap(); if(msg["GUIProtocol"].toUInt() != GUI_PROTOCOL) { //qWarning() << "Client version mismatch."; throw Exception("GUI client version mismatch"); } - // Auth + // Auth UserId uid = storage->validateUser(msg["User"].toString(), msg["Password"].toString()); // throws exception if this failed + VarMap reply = initSession(uid).toMap(); + validClients[socket] = uid; + QList sigdata; + sigdata.append(CS_CORE_STATE); sigdata.append(QVariant(reply)); sigdata.append(QVariant()); sigdata.append(QVariant()); + writeDataToDevice(socket, QVariant(sigdata)); +} +QVariant Core::initSession(UserId uid) { // Find or create session for validated user CoreSession *sess; if(sessions.contains(uid)) sess = sessions[uid]; else { sess = createSession(uid); - validClients[socket] = uid; + //validClients[socket] = uid; } VarMap reply; VarMap coreData; - // FIXME QStringList dataKeys = Global::keys(uid); - QString key; - foreach(key, dataKeys) { - coreData[key] = Global::data(key); + foreach(QString key, dataKeys) { + coreData[key] = Global::data(uid, key); } reply["CoreData"] = coreData; reply["SessionState"] = sess->sessionState(); - QList sigdata; - sigdata.append(CS_CORE_STATE); sigdata.append(QVariant(reply)); sigdata.append(QVariant()); sigdata.append(QVariant()); - writeDataToDevice(socket, QVariant(sigdata)); - sess->sendServerStates(); + return reply; } void Core::processClientUpdate(QTcpSocket *socket, QString key, const QVariant &data) { @@ -263,6 +282,7 @@ CoreSession::CoreSession(UserId uid, Storage *_storage) : user(uid), storage(_st connect(coreProxy, SIGNAL(gsUserInput(BufferId, QString)), this, SLOT(msgFromGui(BufferId, QString))); connect(coreProxy, SIGNAL(gsImportBacklog()), storage, SLOT(importOldBacklog())); connect(coreProxy, SIGNAL(gsRequestBacklog(BufferId, QVariant, QVariant)), this, SLOT(sendBacklog(BufferId, QVariant, QVariant))); + connect(coreProxy, SIGNAL(gsRequestNetworkStates()), this, SLOT(sendServerStates())); connect(this, SIGNAL(displayMsg(Message)), coreProxy, SLOT(csDisplayMsg(Message))); connect(this, SIGNAL(displayStatusMsg(QString, QString)), coreProxy, SLOT(csDisplayStatusMsg(QString, QString))); connect(this, SIGNAL(backlogData(BufferId, QList, bool)), coreProxy, SLOT(csBacklogData(BufferId, QList, bool)));