/*------- 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(); }
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) ) ; } } }
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; }
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); }
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; }
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; }