@ -202,10 +202,12 @@ void QtLocalPeer::receiveConnection()
}
}
QString message ( QString : : fromUtf8 ( uMsg ) ) ;
QString message ( QString : : fromUtf8 ( uMsg ) ) ;
# ifdef Q_OS_WIN
# ifdef Q_OS_WIN
if ( message = = " qbt://pid " )
if ( message = = " qbt://pid " ) {
socket - > write ( QByteArray : : number ( qApp - > applicationPid ( ) ) ) ;
qint64 pid = GetCurrentProcessId ( ) ;
else
socket - > write ( ( const char * ) & pid , sizeof pid ) ;
} else {
socket - > write ( ack , qstrlen ( ack ) ) ;
socket - > write ( ack , qstrlen ( ack ) ) ;
}
# else
# else
socket - > write ( ack , qstrlen ( ack ) ) ;
socket - > write ( ack , qstrlen ( ack ) ) ;
# endif
# endif
@ -219,9 +221,9 @@ void QtLocalPeer::receiveConnection()
}
}
# ifdef Q_OS_WIN
# ifdef Q_OS_WIN
ulong QtLocalPeer : : getRunningPid ( ) {
qint64 QtLocalPeer : : getRunningPid ( ) {
if ( ! isClient ( ) )
if ( ! isClient ( ) )
return false ;
return 0 ;
QLocalSocket socket ;
QLocalSocket socket ;
bool connOk = false ;
bool connOk = false ;
@ -231,32 +233,23 @@ ulong QtLocalPeer::getRunningPid() {
connOk = socket . waitForConnected ( 5000 / 2 ) ;
connOk = socket . waitForConnected ( 5000 / 2 ) ;
if ( connOk | | i )
if ( connOk | | i )
break ;
break ;
Sleep ( DWORD ( 250 ) ) ;
Sleep ( 250 ) ;
}
}
if ( ! connOk )
if ( ! connOk ) return - 1 ;
return false ;
QByteArray uMsg ( " qbt://pid " ) ;
const char * msg = " qbt://pid " ;
QDataStream ds ( & socket ) ;
QDataStream ds ( & socket ) ;
ds . writeBytes ( uMsg . constData ( ) , uMsg . size ( ) ) ;
ds . writeBytes ( msg , qstrlen ( msg ) ) ;
bool res = socket . waitForBytesWritten ( 5000 ) ;
bool res = socket . waitForBytesWritten ( 5000 ) & & socket . waitForReadyRead ( 5000 ) ;
res & = socket . waitForReadyRead ( 5000 ) ;
if ( ! res ) return - 1 ;
if ( ! res )
return - 1 ;
DWORD pid ;
while ( socket . bytesAvailable ( ) < ( int ) sizeof ( quint32 ) )
qint64 pid_size = sizeof pid ;
while ( socket . bytesAvailable ( ) < pid_size )
socket . waitForReadyRead ( ) ;
socket . waitForReadyRead ( ) ;
uMsg . clear ( ) ;
if ( socket . read ( ( char * ) & pid , pid_size ) < pid_size )
quint32 remaining = socket . bytesAvailable ( ) ;
return - 1 ;
uMsg . resize ( remaining ) ;
int got = 0 ;
char * uMsgBuf = uMsg . data ( ) ;
do {
got = ds . readRawData ( uMsgBuf , remaining ) ;
remaining - = got ;
uMsgBuf + = got ;
} while ( remaining & & got > = 0 & & socket . waitForReadyRead ( 2000 ) ) ;
if ( got < 0 )
return - 1 ;
return uMsg . toULong ( ) ;
return pid ;
}
}
# endif
# endif