X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcore.cpp;h=f9bc84fad955138d435851f19a2097efd61ab780;hp=a3dcd26970f2fe06ffa4fe862e2b66bc26437727;hb=8836fdc8e4107437e5fff0e10e18d581297d59e4;hpb=077d44f36d2f5c730283ef6be839aea7dd073d56 diff --git a/src/core/core.cpp b/src/core/core.cpp index a3dcd269..f9bc84fa 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -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)));