}
//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() {
while(readDataFromDevice(socket, bsize, item)) {
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]);
- }
+ sessions[validClients[socket]]->processSignal((ClientSignal)sigdata[0].toInt(), sigdata[1], sigdata[2], sigdata[3]);
} else {
// we need to auth the client
try {
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) {
+ 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();
+ QVariant reply = initSession(uid);
validClients[socket] = uid;
QList<QVariant> sigdata;
- sigdata.append(CS_CORE_STATE); sigdata.append(QVariant(reply)); sigdata.append(QVariant()); sigdata.append(QVariant());
+ sigdata.append(CS_CORE_STATE); sigdata.append(reply); sigdata.append(QVariant()); sigdata.append(QVariant());
writeDataToDevice(socket, QVariant(sigdata));
}
//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;
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);