diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-01-28 15:53:28 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2012-01-28 15:53:28 +0000 |
| commit | c78b8d1b6da1802559bfaa55a6476f2dfdd1229a (patch) | |
| tree | e1469179b273c7ac9762d00e7fe6fb8777cee7aa /src | |
| parent | d3cf5a6e80a07ba8dddfc300ea6126f3bed62dc0 (diff) | |
| download | qmmp-c78b8d1b6da1802559bfaa55a6476f2dfdd1229a.tar.gz qmmp-c78b8d1b6da1802559bfaa55a6476f2dfdd1229a.tar.bz2 qmmp-c78b8d1b6da1802559bfaa55a6476f2dfdd1229a.zip | |
fixed IPC under windows
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2569 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -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 |
