Exemplo n.º 1
0
void QMQTT::Network::onSocketReadReady()
{
    quint8 header = 0;
    int bytesRemaining = 0;
    int bytesRead = 0;

    QDataStream in(_socket);
    QDataStream out(&_buffer);
    while(!_socket->atEnd())
    {
        if(bytesRemaining == 0)
        {
            in >> header;
            bytesRemaining = readRemainingLength(in);
        }

        QByteArray data;
        data.resize(bytesRemaining);
        bytesRead = in.readRawData(data.data(), data.size());
        bytesRemaining -= bytesRead;
        out.writeRawData(data.data(), bytesRead);

        if(bytesRemaining == 0)
        {
            _buffer.reset();
            Frame frame(header, _buffer.buffer());
            _buffer.buffer().clear();
            emit received(frame);
        }
    }
Exemplo n.º 2
0
void QMQTT::Network::onSocketReadReady()
{
    while(!_socket->atEnd())
    {
        if(_bytesRemaining == 0)
        {
            _socket->getChar(reinterpret_cast<char *>(&_header));
            _bytesRemaining = readRemainingLength();
        }

        QByteArray data = _socket->read(_bytesRemaining);
        _buffer.append(data);
        _bytesRemaining -= data.size();

        if(_bytesRemaining == 0)
        {
            Frame frame(_header, _buffer);
            _buffer.clear();
            emit received(frame);
        }
    }
}
Exemplo n.º 3
0
void QMQTT::SslNetwork::onSocketReadReady()
{
    QIODevice *ioDevice = _socket->ioDevice();
    while(!ioDevice->atEnd())
    {
        if(_bytesRemaining == 0)
        {
            if (!ioDevice->getChar(reinterpret_cast<char *>(&_header)))
            {
                // malformed packet
                emit error(QAbstractSocket::OperationError);
                ioDevice->close();
                return;
            }

            _bytesRemaining = readRemainingLength();
            if (_bytesRemaining < 0)
            {
                // malformed remaining length
                emit error(QAbstractSocket::OperationError);
                ioDevice->close();
                return;
            }
        }

        QByteArray data = ioDevice->read(_bytesRemaining);
        _buffer.append(data);
        _bytesRemaining -= data.size();

        if(_bytesRemaining == 0)
        {
            Frame frame(_header, _buffer);
            _buffer.clear();
            emit received(frame);
        }
    }
}