X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcore.cpp;h=dfaa1b723b263bd6ef3a47896406442e1c6c5cb6;hp=9385c64e2848609f928f61a2f5f3f313fbbde350;hb=06a03c2c69ee934aaeec83512bae2fffee83a340;hpb=44b22c4419f478a20f6324f9f3a700a2dec56302 diff --git a/src/core/core.cpp b/src/core/core.cpp index 9385c64e..dfaa1b72 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -33,6 +33,7 @@ Core * Core::instance() { } void Core::destroy() { + //instanceptr->deleteLater(); delete instanceptr; instanceptr = 0; } @@ -47,40 +48,15 @@ void Core::init() { } //SqliteStorage::init(); storage = new SqliteStorage(); - connect(Global::instance(), SIGNAL(dataPutLocally(UserId, QString)), this, SLOT(updateGlobalData(UserId, QString))); connect(&server, SIGNAL(newConnection()), this, SLOT(incomingConnection())); - //startListening(); // FIXME + startListening(); // FIXME make configurable guiUser = 0; - /* - if(Global::runMode == Global::Monolithic) { // TODO Make GUI user configurable - try { - guiUser = storage->validateUser("Default", "password"); - } catch(Storage::AuthError) { - guiUser = storage->addUser("Default", "password"); - } - Q_ASSERT(guiUser); - Global::setGuiUser(guiUser); - createSession(guiUser); - } else guiUser = 0; - */ - // Read global settings from config file - QSettings s; - s.beginGroup("Global"); - foreach(QString unum, s.childGroups()) { - UserId uid = unum.toUInt(); - s.beginGroup(unum); - foreach(QString key, s.childKeys()) { - Global::updateData(uid, key, s.value(key)); - } - s.endGroup(); - } - s.endGroup(); } Core::~Core() { - foreach(QTcpSocket *sock, validClients.keys()) { - delete sock; - } + //foreach(QTcpSocket *sock, validClients.keys()) { + // delete sock; + //} qDeleteAll(sessions); delete storage; } @@ -102,7 +78,7 @@ CoreSession *Core::createSession(UserId uid) { Q_ASSERT(!core->sessions.contains(uid)); CoreSession *sess = new CoreSession(uid, core->storage); core->sessions[uid] = sess; - connect(sess, SIGNAL(proxySignal(CoreSignal, QVariant, QVariant, QVariant)), core, SLOT(recvProxySignal(CoreSignal, QVariant, QVariant, QVariant))); + //connect(sess, SIGNAL(proxySignal(CoreSignal, QVariant, QVariant, QVariant)), core, SLOT(recvProxySignal(CoreSignal, QVariant, QVariant, QVariant))); return sess; } @@ -135,14 +111,12 @@ void Core::clientHasData() { Q_ASSERT(socket && blockSizes.contains(socket)); quint32 bsize = blockSizes.value(socket); QVariant item; - while(readDataFromDevice(socket, bsize, item)) { + if(readDataFromDevice(socket, bsize, item)) { + /* this is probably obsolete now */ if(validClients.contains(socket)) { - QList sigdata = item.toList(); - if((ClientSignal)sigdata[0].toInt() == GS_UPDATE_GLOBAL_DATA) { - processClientUpdate(socket, sigdata[1].toString(), sigdata[2]); - } else { - sessions[validClients[socket]]->processSignal((ClientSignal)sigdata[0].toInt(), sigdata[1], sigdata[2], sigdata[3]); - } + Q_ASSERT(false); + //QList sigdata = item.toList(); + //sessions[validClients[socket]]->processSignal((ClientSignal)sigdata[0].toInt(), sigdata[1], sigdata[2], sigdata[3]); } else { // we need to auth the client try { @@ -157,7 +131,7 @@ void Core::clientHasData() { return; } } - blockSizes[socket] = bsize = 0; + blockSizes[socket] = bsize = 0; // FIXME blockSizes aufräum0rn! } blockSizes[socket] = bsize; } @@ -174,7 +148,6 @@ 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; } @@ -182,22 +155,23 @@ QVariant Core::connectLocalClient(QString user, QString passwd) { void 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) { + QVariantMap msg = v.toMap(); + if(msg["GuiProtocol"].toUInt() != GUI_PROTOCOL) { //qWarning() << "Client version mismatch."; throw Exception("GUI client version mismatch"); } // 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 reply = initSession(uid); + validClients[socket] = uid; // still needed? FIXME + //QList sigdata; + //sigdata.append(CS_CORE_STATE); sigdata.append(reply); sigdata.append(QVariant()); sigdata.append(QVariant()); + disconnect(socket, 0, this, 0); + sessions[uid]->addClient(socket); + writeDataToDevice(socket, reply); } QVariant Core::initSession(UserId uid) { @@ -208,36 +182,12 @@ QVariant Core::initSession(UserId uid) { sess = createSession(uid); //validClients[socket] = uid; } - VarMap reply; - VarMap coreData; - QStringList dataKeys = Global::keys(uid); - foreach(QString key, dataKeys) { - coreData[key] = Global::data(uid, key); - } - reply["CoreData"] = coreData; + QVariantMap reply; reply["SessionState"] = sess->sessionState(); return reply; } -void Core::processClientUpdate(QTcpSocket *socket, QString key, const QVariant &data) { - UserId uid = validClients[socket]; - Global::updateData(uid, key, data); - QList sigdata; - sigdata.append(CS_UPDATE_GLOBAL_DATA); sigdata.append(key); sigdata.append(data); sigdata.append(QVariant()); - foreach(QTcpSocket *s, validClients.keys()) { - if(validClients[s] == uid && s != socket) writeDataToDevice(s, QVariant(sigdata)); - } -} - -void Core::updateGlobalData(UserId uid, QString key) { - QVariant data = Global::data(uid, key); - QList sigdata; - sigdata.append(CS_UPDATE_GLOBAL_DATA); sigdata.append(key); sigdata.append(data); sigdata.append(QVariant()); - foreach(QTcpSocket *socket, validClients.keys()) { - if(validClients[socket] == uid) writeDataToDevice(socket, QVariant(sigdata)); - } -} - +/* void Core::recvProxySignal(CoreSignal sig, QVariant arg1, QVariant arg2, QVariant arg3) { CoreSession *sess = qobject_cast(sender()); Q_ASSERT(sess); @@ -249,3 +199,4 @@ void Core::recvProxySignal(CoreSignal sig, QVariant arg1, QVariant arg2, QVarian if(validClients[socket] == uid) writeDataToDevice(socket, QVariant(sigdata)); } } +*/