diff options
| -rw-r--r-- | src/app/qmmpstarter.cpp | 30 | ||||
| -rw-r--r-- | src/app/qmmpstarter.h | 6 |
2 files changed, 35 insertions, 1 deletions
diff --git a/src/app/qmmpstarter.cpp b/src/app/qmmpstarter.cpp index 36bb87a3d..d01dd79a6 100644 --- a/src/app/qmmpstarter.cpp +++ b/src/app/qmmpstarter.cpp @@ -37,7 +37,7 @@ #include "qmmpstarter.h" #include "builtincommandlineoption.h" -#ifdef Q_OS_WIN32 +#ifdef Q_OS_WIN #define UDS_PATH QString("qmmp") #else #define UDS_PATH QString("/tmp/qmmp.sock.%1").arg(getuid()).toAscii().constData() @@ -50,6 +50,9 @@ QMMPStarter::QMMPStarter(int argc,char **argv, QObject* parent) : QObject(parent m_player = 0; m_core = 0; m_ui = 0; +#ifdef Q_OS_WIN + m_named_mutex = 0; +#endif m_option_manager = new BuiltinCommandLineOption(this); QStringList tmp; for (int i = 1;i < argc;i++) @@ -86,6 +89,26 @@ QMMPStarter::QMMPStarter(int argc,char **argv, QObject* parent) : QObject(parent m_socket = new QLocalSocket(this); bool noStart = commands.keys().contains("--no-start"); +#ifdef Q_OS_WIN + //Windows IPC implementation (named mutex and named pipe) + m_named_mutex = CreateMutexA(NULL, TRUE, "QMMP-403cd318-cc7b-4622-8dfd-df18d1e70057"); + if(GetLastError() == NO_ERROR && !noStart) + { + m_server->listen (UDS_PATH); + startPlayer(); + } + else + { + m_socket->connectToServer(UDS_PATH); //connecting + m_socket->waitForConnected(); + if(!m_socket->isValid()) //invalid connection + { + qWarning("QMMPStarter: unable to connect to server"); + exit(0); + } + writeCommand(); + } +#else if(!noStart && m_server->listen (UDS_PATH)) //trying to create server { startPlayer(); @@ -118,12 +141,17 @@ QMMPStarter::QMMPStarter(int argc,char **argv, QObject* parent) : QObject(parent } else exit(0); +#endif } QMMPStarter::~QMMPStarter() { if (m_ui) delete m_ui; +#ifdef Q_OS_WIN + if(m_named_mutex) + ReleaseMutex(m_named_mutex); +#endif } void QMMPStarter::startPlayer() diff --git a/src/app/qmmpstarter.h b/src/app/qmmpstarter.h index 69003e568..b84e8013f 100644 --- a/src/app/qmmpstarter.h +++ b/src/app/qmmpstarter.h @@ -24,6 +24,9 @@ #include <QObject> #include <QAbstractSocket> #include <QStringList> +#ifdef Q_OS_WIN +#include <windows.h> +#endif class QLocalServer; class QLocalSocket; @@ -73,6 +76,9 @@ private: BuiltinCommandLineOption* m_option_manager; QLocalServer *m_server; QLocalSocket *m_socket; +#ifdef Q_OS_WIN + HANDLE m_named_mutex; +#endif }; #endif |
