Beispiel #1
0
/*------- Reader ------------------------------------------------------------*/
Reader::Reader()
{
	m_pWorker = new ReaderWorker();
	m_pThread = new QThread(this);

	m_pWorker->moveToThread(m_pThread);

	connect(m_pThread, SIGNAL(finished()),
			m_pWorker, SLOT(deleteLater()));

	connect(m_pThread, SIGNAL(finished()),
			m_pThread, SLOT(deleteLater()));

	connect(this, SIGNAL(signalClose()),
			m_pWorker, SLOT(close()));

	connect(m_pWorker, SIGNAL(closed()),
			SIGNAL(closed()));

	connect(this, SIGNAL(signalOpen()),
			m_pWorker, SLOT(open()));

	connect(m_pWorker, SIGNAL(opened()),
			SIGNAL(opened()));

	connect(this, SIGNAL(signalReadBlock()),
			m_pWorker, SLOT(readBlock()));

	connect(m_pWorker, SIGNAL(bytesRead(qint64)),
			SIGNAL(bytesRead(qint64)));

	m_pThread->start();
}
Beispiel #2
0
void ReaderWorker::readBlock()
{
    QDataStream in(&m_file);

	qint64 readBytes = 0;
	qint64 bytesToRead = 0;

	char *buffer = m_pBuffer->buffer();
	const int bufferSize = m_pBuffer->size();

	bytesToRead = qMin((qint64)bufferSize, m_filesize - m_position);

	m_stop = false;

	if (bytesToRead) {
		m_pBuffer->lock();

		readBytes = in.readRawData(buffer, bytesToRead);
		m_position = m_file.pos();
		m_pBuffer->setDataSize(readBytes);

		m_pBuffer->unlock();

		emit bytesRead(m_position);
	}
}
void MdGpsSerial::incomingData( const QByteArray& bytes) {
    int a = bytes.size();
    //    qDebug() << "MdGpsSerial: bytes read:" << bytes.size();
    //    qDebug() << "MdGpsSerial: bytes:" << bytes;
    QString s (bytes);
    emit bytesRead ( bytes );

    QStringList sl = s.split (QRegExp("\\r\\n]") );
    QString rs;
    for ( int i = 1 ; i <= sl.size() ; i++ ) {
        bool t = true;
        if ( i == sl.size() ) {
            if ( bytes.size() >= 2 && !(bytes[a-2] == '\r') && !(bytes[a-1]=='\n') ) {
                buffer += sl[i-1];
                t = false;
            }
        }
        if ( t ) {
            if ( !buffer.isEmpty() ) {
                rs = buffer;
                buffer.clear();
            }
            rs += sl[i-1];
            parseLine (rs);
            //    		emit lineRead ( QString (rs) ) ;
        }
    }
}
Beispiel #4
0
sys::SSize_T io::ByteStream::read(sys::byte *b, sys::Size_T len)
{
    sys::Off_T maxSize = available();
    if (maxSize <= 0) return io::InputStream::IS_END;

    if (maxSize < (sys::Off_T)len)
        len = maxSize;

    if (len <= 0) return 0;

#if defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x530)
    sys::SSize_T bytesRead(0);
    while (bytesRead < len && mData.good())
    {
        b[bytesRead++] = mData.get();
    }
    len = bytesRead;
#else
    mData.read((char *)b, len);
#endif
    // Could be problem if streams are broken
    // alternately could return gcount in else
    // case above
    return len;
}
Beispiel #5
0
int clSocketBase::ReadMessage(wxString& message, int timeout) throw (clSocketException)
{
    size_t message_len(0);
    size_t bytesRead(0);
    int rc = Read( (char*)&message_len, sizeof(message_len), bytesRead, timeout);

    if ( rc != kSuccess ) {
        // timeout
        return rc;
    }

    bytesRead = 0;
    char *buff = new char[message_len+1];
    memset(buff, 0, message_len+1);
    rc = Read(buff, message_len, bytesRead, timeout);
    if ( rc != kSuccess ) {
        wxDELETEA( buff );
        return rc;
    }
    
    if ( bytesRead == 0 ) {
        // session was closed
        wxDELETEA( buff );
        throw clSocketException("connection closed by peer");
        
    } else if ( bytesRead != message_len ) {
        wxDELETEA( buff );
        throw clSocketException("Wrong message length received");
    }

    buff[message_len] = '\0';
    message = buff;
    return kSuccess;
}
void MdQextSerialCom::onReadyRead()
{
    QByteArray bytes;
    int bc = port->bytesAvailable();
    bytes.resize(bc);
    port->read(bytes.data(), bytes.size());
    emit bytesRead( bytes );
}
int FileStreamBuf::readFromDevice(char* buffer, std::streamsize length)
{
	if (INVALID_HANDLE_VALUE == _handle || !(getMode() & std::ios::in))
		return -1;

	if (getMode() & std::ios::out)
		sync();
	
	DWORD bytesRead(0);
	BOOL rc = ReadFile(_handle, buffer, static_cast<DWORD>(length), &bytesRead, NULL);
	if (rc == 0)
		File::handleLastError(_path);

	_pos += bytesRead;

	return static_cast<int>(bytesRead);
}
Beispiel #8
0
int clSocketBase::ReadMessage(wxString& message, int timeout) throw(clSocketException)
{
    // send the length in string form to avoid binary / arch differences between remote and local machine
    char msglen[11];
    memset(msglen, 0, sizeof(msglen));

    size_t message_len(0);
    size_t bytesRead(0);
    int rc = Read((char*)msglen, sizeof(msglen) - 1, bytesRead, timeout);
    if(rc != kSuccess) {
        // timeout
        return rc;
    }

    // convert the string to int
    message_len = ::atoi(msglen);

    bytesRead = 0;
    char* buff = new char[message_len + 1];
    memset(buff, 0, message_len + 1);

    // read the entire amount we need
    int bytesLeft = message_len;
    int totalRead = 0;
    while(bytesLeft > 0) {
        rc = Read(buff + totalRead, bytesLeft, bytesRead, timeout);
        if(rc != kSuccess) {
            wxDELETEA(buff);
            return rc;

        } else if(rc == 0) {
            // session was closed
            wxDELETEA(buff);
            throw clSocketException("connection closed by peer");

        } else {
            bytesLeft -= bytesRead;
            totalRead += bytesRead;
            bytesRead = 0;
        }
    }

    buff[message_len] = '\0';
    message = buff;
    return kSuccess;
}
Beispiel #9
0
int clSocketBase::ReadMessage(wxString& message, int timeout)
{
    // send the length in string form to avoid binary / arch differences between remote and local machine
    char msglen[11];
    memset(msglen, 0, sizeof(msglen));

    size_t message_len(0);
    size_t bytesRead(0);
    int rc = Read((char*)msglen, sizeof(msglen) - 1, bytesRead, timeout);
    if(rc != kSuccess) {
        // timeout
        return rc;
    }

    // convert the string to int
    message_len = ::atoi(msglen);

    bytesRead = 0;
    std::unique_ptr<char> pBuff(new char[message_len]);

    // read the entire amount we need
    int bytesLeft = message_len;
    int totalRead = 0;
    while(bytesLeft > 0) {
        rc = Read(pBuff.get() + totalRead, bytesLeft, bytesRead, timeout);
        if(rc != kSuccess) {
            return rc;

        } else {
            bytesLeft -= bytesRead;
            totalRead += bytesRead;
            bytesRead = 0;
        }
    }

    message.assign(pBuff.get(), message_len);
    return kSuccess;
}