diff options
author | Anne Jan Brouwer <brouwer@annejan.com> | 2014-08-17 05:23:37 +0200 |
---|---|---|
committer | Anne Jan Brouwer <ajbrouwer@totalactivemedia.nl> | 2014-08-17 05:23:37 +0200 |
commit | 9c70b87e1e9736e2cf74162532665d9d7d0c5149 (patch) | |
tree | 7686531a2596bb67321e6bad99c4ff2f442a93ea /singleapplication.cpp | |
parent | a0b9842a969ed5454d3c502fa03b9a9c036bb862 (diff) |
Highlander code
Diffstat (limited to 'singleapplication.cpp')
-rw-r--r-- | singleapplication.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/singleapplication.cpp b/singleapplication.cpp new file mode 100644 index 00000000..fc668f97 --- /dev/null +++ b/singleapplication.cpp @@ -0,0 +1,68 @@ +#include <QLocalSocket> + +#include "singleapplication.h" + +SingleApplication::SingleApplication(int &argc, char *argv[], const QString uniqueKey) : QApplication(argc, argv), _uniqueKey(uniqueKey) +{ + sharedMemory.setKey(_uniqueKey); + if (sharedMemory.attach()) + _isRunning = true; + else + { + _isRunning = false; + // create shared memory. + if (!sharedMemory.create(1)) + { + qDebug("Unable to create single instance."); + return; + } + // create local server and listen to incomming messages from other instances. + localServer = new QLocalServer(this); + connect(localServer, SIGNAL(newConnection()), this, SLOT(receiveMessage())); + localServer->listen(_uniqueKey); + } +} + +// public slots. + +void SingleApplication::receiveMessage() +{ + QLocalSocket *localSocket = localServer->nextPendingConnection(); + if (!localSocket->waitForReadyRead(timeout)) + { + qDebug() << localSocket->errorString().toLatin1(); + return; + } + QByteArray byteArray = localSocket->readAll(); + QString message = QString::fromUtf8(byteArray.constData()); + emit messageAvailable(message); + localSocket->disconnectFromServer(); +} + +// public functions. + +bool SingleApplication::isRunning() +{ + return _isRunning; +} + +bool SingleApplication::sendMessage(const QString &message) +{ + if (!_isRunning) + return false; + QLocalSocket localSocket(this); + localSocket.connectToServer(_uniqueKey, QIODevice::WriteOnly); + if (!localSocket.waitForConnected(timeout)) + { + qDebug() << localSocket.errorString().toLatin1(); + return false; + } + localSocket.write(message.toUtf8()); + if (!localSocket.waitForBytesWritten(timeout)) + { + qDebug() << localSocket.errorString().toLatin1(); + return false; + } + localSocket.disconnectFromServer(); + return true; +} |