Example #1
0
void QtLocalPeer::receiveConnection()
{
    QLocalSocket* socket = server->nextPendingConnection();
    if (!socket)
        return;

    // Why doesn't Qt have a blocking stream that takes care of this shait???
    while (socket->bytesAvailable() < static_cast<int>(sizeof(quint32))) {
        if (!socket->isValid()) // stale request
            return;
        socket->waitForReadyRead(1000);
    }
    QDataStream ds(socket);
    QByteArray uMsg;
    quint32 remaining;
    ds >> remaining;
    uMsg.resize(remaining);
    int got = 0;
    char* uMsgBuf = uMsg.data();
    //qDebug() << "RCV: remaining" << remaining;
    do {
        got = ds.readRawData(uMsgBuf, remaining);
        remaining -= got;
        uMsgBuf += got;
        //qDebug() << "RCV: got" << got << "remaining" << remaining;
    } while (remaining && got >= 0 && socket->waitForReadyRead(2000));
    //### error check: got<0
    if (got < 0) {
        qWarning() << "QtLocalPeer: Message reception failed" << socket->errorString();
        delete socket;
        return;
    }
    // ### async this
    QString message = QString::fromUtf8(uMsg.constData(), uMsg.size());
    socket->write(ack, qstrlen(ack));
    socket->waitForBytesWritten(1000);
    emit messageReceived(message, socket); // ##(might take a long time to return)
}
Example #2
0
void DaoxDebugger::slotSetBreakPoint()
{
	QLocalSocket *socket = server.nextPendingConnection();
	QByteArray sdata;
	QTime dieTime= QTime::currentTime().addMSecs(1000);
	while( socket->isValid() && sdata.count( '\0' ) < 2 ){
		if( QTime::currentTime() > dieTime ) break;
		socket->waitForReadyRead();
		sdata += socket->readAll();
	}
	QList<QByteArray> data = sdata.split( '\0' );
	if( data.size() < 3 ) return;

	QString name = data[0];
	int set = data[1].toInt();
	int line = data[2].toInt();
	if( set ){
		if( not breakPoints.contains( name ) ) breakPoints[ name ] = QMap<int,int>();
		breakPoints[ name ][ line ] = 1;
	}else{
		if( breakPoints.contains( name ) ) breakPoints[name].remove( line );
		if( breakPoints[name].size() ==0 ) breakPoints.remove( name );
	}
}