|
|
|
|
|
#include "QSignleApplication.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include <QMainWindow>
|
|
|
|
|
|
#include <QtNetwork/QLocalServer>
|
|
|
|
|
|
#include <QtNetwork/QLocalSocket>
|
|
|
|
|
|
#include <QFileInfo>
|
|
|
|
|
|
#include <QMessageBox>
|
|
|
|
|
|
|
|
|
|
|
|
#pragma execution_character_set("utf-8")
|
|
|
|
|
|
SingleApplication::SingleApplication(int &args, char **argv, QString strServerName) :
|
|
|
|
|
|
QApplication(args, argv),
|
|
|
|
|
|
instanceRunning(false),
|
|
|
|
|
|
localServer(NULL),
|
|
|
|
|
|
mainWindow(NULL)
|
|
|
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
|
|
|
* һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ localServer <EFBFBD>Ľ<EFBFBD><EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* Ŀǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD>ȷ<EFBFBD>ˣ<EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>ɿ<EFBFBD><EFBFBD>ģ<EFBFBD>Ӧ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
// serverName = QFileInfo(QCoreApplication::applicationFilePath()).fileName();
|
|
|
|
|
|
//m_serverName = strServerName;
|
|
|
|
|
|
m_serverName = applicationName();
|
|
|
|
|
|
initLocalConnection();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SingleApplication::initLocalConnection()
|
|
|
|
|
|
{
|
|
|
|
|
|
instanceRunning = false;
|
|
|
|
|
|
QLocalSocket socket;
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><F1A3ACB2><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
socket.connectToServer(m_serverName);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>500ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (socket.waitForConnected(500)) {
|
|
|
|
|
|
instanceRunning = true;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺<EFBFBD><E7A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
QTextStream stream(&socket);
|
|
|
|
|
|
QStringList args = QCoreApplication::arguments();
|
|
|
|
|
|
if (args.count() > 1)
|
|
|
|
|
|
stream << args.last();
|
|
|
|
|
|
else
|
|
|
|
|
|
stream << QString();
|
|
|
|
|
|
stream.flush();
|
|
|
|
|
|
socket.waitForBytesWritten();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
newLocalServer();//<2F><><EFBFBD>Ӳ<EFBFBD><D3B2>Ͻ<EFBFBD><CFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// ˵<><CBB5><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>LocalServer
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void SingleApplication::newLocalServer()
|
|
|
|
|
|
{
|
|
|
|
|
|
localServer = new QLocalServer(this);
|
|
|
|
|
|
connect(localServer, SIGNAL(newConnection()), this, SLOT(newLocalConnection()));
|
|
|
|
|
|
if (!localServer->listen(m_serverName)) {
|
|
|
|
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>,<2C>Ƴ<EFBFBD>֮
|
|
|
|
|
|
if (localServer->serverError() == QAbstractSocket::AddressInUseError) {
|
|
|
|
|
|
QLocalServer::removeServer(m_serverName); //<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD>
|
|
|
|
|
|
localServer->listen(m_serverName); //<2F>ٴμ<D9B4><CEBC><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SingleApplication::newLocalConnection()
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><F1A3ACB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8> nextPendingConnection() <20><>ȡ<EFBFBD><EFBFBD><D7BD><EFBFBD>
|
|
|
|
|
|
QLocalSocket *socket = localServer->nextPendingConnection();
|
|
|
|
|
|
if (!socket)
|
|
|
|
|
|
return;
|
|
|
|
|
|
socket->waitForReadyRead(1000);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
QTextStream stream(socket);
|
|
|
|
|
|
delete socket;
|
|
|
|
|
|
if (mainWindow != NULL) {
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1>˵<EFBFBD><CBB5><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>չʾ<D5B9><CABE><EFBFBD><EFBFBD><EFBFBD>棬ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ʾ
|
|
|
|
|
|
mainWindow->raise();
|
|
|
|
|
|
mainWindow->activateWindow();
|
|
|
|
|
|
mainWindow->setWindowState((mainWindow->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
|
|
|
|
|
|
mainWindow->show();
|
|
|
|
|
|
//QMessageBox::warning(NULL, "<22><><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// ˵<><CBB5><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, true - <20><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD> false - û<><C3BB>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
bool SingleApplication::getInstanceRunning() const
|
|
|
|
|
|
{
|
|
|
|
|
|
return instanceRunning;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QMainWindow *SingleApplication::getMainWindow() const
|
|
|
|
|
|
{
|
|
|
|
|
|
return mainWindow;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SingleApplication::setMainWindow(QMainWindow *value)
|
|
|
|
|
|
{
|
|
|
|
|
|
mainWindow = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
|