X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=main%2Fmain_gui.cpp;fp=main%2Fmain_gui.cpp;h=bf6ed14677a1448b5ec5f9c9de107b514c0cafcf;hp=10bc53e1c3aa52220f048792a8e1d6b2eb5009ab;hb=04e21ce26ebabdde9586ca9d2a3168431e448df5;hpb=91ee3f5533474f265553a0870bb1c07a4b686906 diff --git a/main/main_gui.cpp b/main/main_gui.cpp index 10bc53e1..bf6ed146 100644 --- a/main/main_gui.cpp +++ b/main/main_gui.cpp @@ -24,6 +24,7 @@ #include "quassel.h" #include "guiproxy.h" +#include "util.h" #include "mainwin.h" @@ -33,25 +34,68 @@ int main(int argc, char **argv) { QApplication::setApplicationName("Quassel IRC"); QApplication::setOrganizationName("The Quassel Team"); - Quassel::runMode = Quassel::GUIOnly; - quassel = new Quassel(); + Global::runMode = Global::GUIOnly; + global = new Global(); guiProxy = new GUIProxy(); MainWin mainWin; - mainWin.show(); int exitCode = app.exec(); delete guiProxy; - delete quassel; + delete global; } -void GUIProxy::send(GUISignal sig, QVariant arg1, QVariant arg2, QVariant arg3) { +GUIProxy::GUIProxy() { + if(guiProxy) qFatal("Trying to instantiate more than one CoreProxy object!"); + + blockSize = 0; + + connect(&socket, SIGNAL(readyRead()), this, SLOT(serverHasData())); + connect(&socket, SIGNAL(connected()), this, SIGNAL(coreConnected())); + connect(&socket, SIGNAL(disconnected()), this, SIGNAL(coreDisconnected())); + connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(serverError(QAbstractSocket::SocketError))); + connect(global, SIGNAL(dataPutLocally(QString)), this, SLOT(updateCoreData(QString))); + connect(this, SIGNAL(csUpdateGlobalData(QString, QVariant)), global, SLOT(updateData(QString, QVariant))); + +} +void GUIProxy::connectToCore(QString host, quint16 port) { + socket.connectToHost(host, port); + //VarMap initmsg; + //initmsg["GUIProtocol"] = GUI_PROTOCOL; + //send(GS_CLIENT_INIT, QVariant(initmsg)); +} +void GUIProxy::disconnectFromCore() { + socket.close(); } -void GUIProxy::recv(CoreSignal sig, QVariant arg1, QVariant arg2, QVariant arg3) { +void GUIProxy::serverError(QAbstractSocket::SocketError) { + emit coreConnectionError(socket.errorString()); +} +void GUIProxy::serverHasData() { + QVariant item; + while(readDataFromDevice(&socket, blockSize, item)) { + emit recvPartialItem(1,1); + QList sigdata = item.toList(); + Q_ASSERT(sigdata.size() == 4); + recv((CoreSignal)sigdata[0].toInt(), sigdata[1], sigdata[2], sigdata[3]); + blockSize = 0; + } + if(blockSize > 0) { + emit recvPartialItem(socket.bytesAvailable(), blockSize); + } +} +void GUIProxy::send(GUISignal sig, QVariant arg1, QVariant arg2, QVariant arg3) { + QList sigdata; + sigdata.append(sig); sigdata.append(arg1); sigdata.append(arg2); sigdata.append(arg3); + //qDebug() << "Sending signal: " << sigdata; + writeDataToDevice(&socket, QVariant(sigdata)); +} +void GUIProxy::updateCoreData(QString key) { + QVariant data = global->getData(key); + send(GS_UPDATE_GLOBAL_DATA, key, data); }