}
void Core::destroy() {
+ //instanceptr->deleteLater();
delete instanceptr;
instanceptr = 0;
}
}
//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;
}
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;
}
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<QVariant> 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<QVariant> 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 {
return;
}
}
- blockSizes[socket] = bsize = 0;
+ blockSizes[socket] = bsize = 0; // FIXME blockSizes aufräum0rn!
}
blockSizes[socket] = bsize;
}
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() {
+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<QVariant> 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<QVariant> 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) {
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<QVariant> 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<QVariant> 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<CoreSession*>(sender());
Q_ASSERT(sess);
if(validClients[socket] == uid) writeDataToDevice(socket, QVariant(sigdata));
}
}
+*/