+void Client::coreSocketDisconnected() {
+ connectedToCore = false;
+ emit disconnected();
+}
+
+void Client::recvCoreState(const QVariant &state) {
+ disconnect(this, SIGNAL(recvPartialItem(uint, uint)), this, SIGNAL(coreConnectionProgress(uint, uint)));
+ syncToCore(state);
+
+}
+
+void Client::syncToCore(const QVariant &coreState) {
+ VarMap sessionState = coreState.toMap()["SessionState"].toMap();
+ VarMap sessData = sessionState["SessionData"].toMap();
+
+ foreach(QString key, sessData.keys()) {
+ recvSessionData(key, sessData[key]);
+ }
+ QList<QVariant> coreBuffers = sessionState["Buffers"].toList();
+ /* make lookups by id faster */
+ foreach(QVariant vid, coreBuffers) {
+ BufferId id = vid.value<BufferId>();
+ bufferIds[id.uid()] = id; // make lookups by id faster
+ buffer(id); // create all buffers, so we see them in the network views
+ }
+ netsAwaitingInit = sessionState["Networks"].toStringList();
+ connectedToCore = true;
+ if(netsAwaitingInit.count()) {
+ emit coreConnectionMsg(tr("Requesting network states..."));
+ emit coreConnectionProgress(0, netsAwaitingInit.count());
+ emit requestNetworkStates();
+ }
+ else {
+ emit coreConnectionProgress(1, 1);
+ emit connected();
+ }
+}
+
+void Client::recvSessionData(const QString &key, const QVariant &data) {
+ sessionData[key] = data;
+ emit sessionDataChanged(key, data);
+ emit sessionDataChanged(key);
+}
+
+void Client::storeSessionData(const QString &key, const QVariant &data) {
+ // Not sure if this is a good idea, but we'll try it anyway:
+ // Calling this function only sends a signal to core. Data is stored upon reception of the update signal,
+ // rather than immediately.
+ emit instance()->sendSessionData(key, data);