예제 #1
0
bool QtLocalPeer::isClient()
{
	if(lockFile.isLocked())
	{
		return false;
	}

	if(!lockFile.lock(QtLockedFile::WriteLock, false))
	{
		return true;
	}

	bool res = server->listen(socketName);
#if defined(Q_OS_UNIX) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0))

	// ### Workaround
	if(!res && server->serverError() == QAbstractSocket::AddressInUseError)
	{
		QFile::remove(QDir::cleanPath(QDir::tempPath()) + QLatin1Char('/') + socketName);
		res = server->listen(socketName);
	}

#endif

	if(!res)
	{
		qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString()));
	}

	QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection()));
	return false;
}
예제 #2
0
파일: server.cpp 프로젝트: coshaugh/CS441
Server::Server(QString name,QObject *parent) : QObject(parent)
{
    totalRequests=0;
    myServer = new QLocalServer(this);
    if (!myServer->listen(name)) {
        qDebug()<<"Can't Start Server";
        return;
    }
    //connect(ui->quitButton, SIGNAL(clicked()), this, SLOT(close()));
    connect(myServer, SIGNAL(newConnection()), this, SLOT(receiveConnection()));
    connect(this,SIGNAL(newMessage(QString)),this,SLOT(test(QString)));
    qDebug()<<"Started Server "<<name;
}
예제 #3
0
bool QtLocalPeer::isClient()
{
    if (lockFile.isLocked())
        return false;

    if (!lockFile.lock(QtLockedFile::WriteLock, false))
        return true;

    if (!QLocalServer::removeServer(socketName))
        qWarning("QtSingleCoreApplication: could not cleanup socket");
    bool res = server->listen(socketName);
    if (!res)
        qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString()));
    QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection()));
    return false;
}
예제 #4
0
ControlPeer::ControlPeer(QObject * parent)
    : QObject(parent)
{
    p = new Private;
    p->error = NoError;
    p->mode = ModeUndefined;

    QString controlSocketPath = Guzum::Config::controlSocketPath();

    p->server = new QLocalServer(this);
    bool res = p->server->listen(controlSocketPath);
    if (!res) {
        if (p->server->serverError() == QAbstractSocket::AddressInUseError) {
            // check is the server alive, if not then remove socket file and try again
            p->mode = ModeClient;
            QString response = sendRawMessage("test", 1000);
            if (error() != NoError) {
                // failed to send message so there is no listeners there
                // so try to start again
                QFile::remove(controlSocketPath);
                res = p->server->listen(controlSocketPath);
                if (!res) {
                    p->error = FailedToStartServerError;
                    p->mode = ModeUndefined;
                } else {
                    p->error = NoError;
                    p->mode = ModeServer;
                    QObject::connect(p->server, SIGNAL(newConnection()), SLOT(receiveConnection()));
                }
                return;
            } else {
                // service responded, so we are really in client mode
                p->error = NoError;
                p->mode = ModeClient;
            }
        } else {
            p->error = FailedToStartServerError;
            p->mode = ModeUndefined;
        }
    } else {
        p->error = NoError;
        p->mode = ModeClient;
    }
}
예제 #5
0
void LocalPeer::listen()
{
	server_->listen(socket_name_);
    QObject::connect(server_, SIGNAL(newConnection()), SLOT(receiveConnection()), Qt::QueuedConnection);
}