X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=core%2Fcoreproxy.cpp;h=ee9ea2d1095af19efe6f661089f692ea5812d342;hp=dd14c812deb8c918cfce538f15018361967f348c;hb=26586e615ffe42bb2b1b307ed1324a6e3051f5da;hpb=04e21ce26ebabdde9586ca9d2a3168431e448df5 diff --git a/core/coreproxy.cpp b/core/coreproxy.cpp index dd14c812..ee9ea2d1 100644 --- a/core/coreproxy.cpp +++ b/core/coreproxy.cpp @@ -21,77 +21,16 @@ #include #include "coreproxy.h" -#include "quassel.h" +#include "global.h" #include "util.h" +#include "core.h" CoreProxy::CoreProxy() { - if(coreProxy) qFatal("Trying to instantiate more than one CoreProxy object!"); - - connect(global, SIGNAL(dataPutLocally(QString)), this, SLOT(updateGlobalData(QString))); - connect(&server, SIGNAL(newConnection()), this, SLOT(incomingConnection())); - if(!server.listen(QHostAddress::Any, 4242)) { - qFatal(QString(QString("Could not open GUI client port %1: %2").arg(4242).arg(server.errorString())).toAscii()); - } - qDebug() << "Listening for GUI clients on port" << server.serverPort() << "."; -} - -void CoreProxy::incomingConnection() { - QTcpSocket *socket = server.nextPendingConnection(); - connect(socket, SIGNAL(disconnected()), this, SLOT(clientDisconnected())); - connect(socket, SIGNAL(readyRead()), this, SLOT(clientHasData())); - clients.append(socket); - blockSizes.insert(socket, (quint32)0); - qDebug() << "Client connected from " << socket->peerAddress().toString(); -} - -void CoreProxy::clientHasData() { - QTcpSocket *socket = dynamic_cast(sender()); - Q_ASSERT(socket && blockSizes.contains(socket)); - quint32 bsize = blockSizes.value(socket); - QVariant item; - while(readDataFromDevice(socket, bsize, item)) { - QList sigdata = item.toList(); - Q_ASSERT(sigdata.size() == 4); - switch((GUISignal)sigdata[0].toInt()) { - case GS_CLIENT_INIT: processClientInit(socket, sigdata[1]); break; - case GS_UPDATE_GLOBAL_DATA: processClientUpdate(socket, sigdata[1].toString(), sigdata[2]); break; - //case GS_CLIENT_READY: processClientReady(sigdata[1], sigdata[2], sigdata[3]); break; - default: recv((GUISignal)sigdata[0].toInt(), sigdata[1], sigdata[2], sigdata[3]); break; - } - blockSizes[socket] = bsize = 0; - } - blockSizes[socket] = bsize; -} - -void CoreProxy::clientDisconnected() { - QTcpSocket *socket = dynamic_cast(sender()); - blockSizes.remove(socket); - clients.removeAll(socket); - qDebug() << "Client disconnected."; -} - -void CoreProxy::processClientInit(QTcpSocket *socket, const QVariant &v) { - VarMap msg = v.toMap(); - if(msg["GUIProtocol"].toUInt() != GUI_PROTOCOL) { - qDebug() << "Client version mismatch. Disconnecting."; - socket->close(); - return; - } - VarMap reply; - VarMap coreData; - QStringList dataKeys = global->getKeys(); - QString key; - foreach(key, dataKeys) { - coreData[key] = global->getData(key); - } - reply["CoreData"] = coreData; - //QVariant payload = QByteArray(1000000, 'a'); - //reply["payload"] = payload; - QList sigdata; - sigdata.append(CS_CORE_STATE); sigdata.append(QVariant(reply)); sigdata.append(QVariant()); sigdata.append(QVariant()); - writeDataToDevice(socket, QVariant(sigdata)); +// connect(global, SIGNAL(dataPutLocally(QString)), this, SLOT(updateGlobalData(QString))); +// connect(&server, SIGNAL(newConnection()), this, SLOT(incomingConnection())); } +/* void CoreProxy::processClientUpdate(QTcpSocket *socket, QString key, QVariant data) { global->updateData(key, data); QList sigdata; @@ -106,9 +45,11 @@ void CoreProxy::updateGlobalData(QString key) { QVariant data = global->getData(key); emit csUpdateGlobalData(key, data); } +*/ +/* void CoreProxy::send(CoreSignal sig, QVariant arg1, QVariant arg2, QVariant arg3) { - sendToGUI(sig, arg1, arg2, arg3); + QList sigdata; sigdata.append(sig); sigdata.append(arg1); sigdata.append(arg2); sigdata.append(arg3); //qDebug() << "Sending signal: " << sigdata; @@ -117,15 +58,20 @@ void CoreProxy::send(CoreSignal sig, QVariant arg1, QVariant arg2, QVariant arg3 writeDataToDevice(socket, QVariant(sigdata)); } } +*/ -void CoreProxy::recv(GUISignal sig, QVariant arg1, QVariant arg2, QVariant arg3) { +void CoreProxy::recv(ClientSignal sig, QVariant arg1, QVariant arg2, QVariant arg3) { //qDebug() << "[CORE] Received signal" << sig << ":" << arg1<(), arg2.toString()); break; + case GS_REQUEST_CONNECT: emit gsRequestConnect(arg1.toStringList()); break; + case GS_IMPORT_BACKLOG: emit gsImportBacklog(); break; + case GS_REQUEST_BACKLOG: emit gsRequestBacklog(arg1.value(), arg2, arg3); break; + //default: qWarning() << "Unknown signal in CoreProxy::recv: " << sig; + default: emit gsGeneric(sig, arg1, arg2, arg3); } } -CoreProxy *coreProxy; + +//CoreProxy *coreProxy;