Advertisement
benhj

Newer socket-reader code

May 21st, 2013
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * @brief The ReadFunctor struct reads data from the nntp socket and stores
  3.  * in an array of chars
  4.  */
  5. struct ReadFunctor
  6. {
  7.     ReadFunctor(QSslSocket &sock, std::vector<char> &buffer) : m_sock(sock), m_buffer(buffer){}
  8.  
  9.     qint64 operator()()
  10.     {
  11.         if(m_sock.waitForReadyRead(2000)) {
  12.             qint64 bytesAvailable = m_sock.bytesAvailable();
  13.             qDebug() << "bytesAvailable: "<<bytesAvailable;
  14.             m_buffer.resize(bytesAvailable);
  15.             return m_sock.read(&m_buffer[0], bytesAvailable);
  16.         }
  17.         return 0;
  18.     }
  19.     QSslSocket &m_sock;
  20.     std::vector<char> &m_buffer;
  21. };
  22.  
  23.  
  24. void
  25. NNTPConnector::readFromSocket(std::ostream &writeToMe, int const count,
  26.                               std::string const &escapeSequence)
  27. {
  28.     qint64 bytesRead = 0;
  29.     int breakCount = 0;
  30.     // note, code for StreamWriter is omitted for brevity
  31.     StreamWriter streamWriter(writeToMe, count, escapeSequence);
  32.     do {
  33.         std::vector<char> buffer;
  34.         ReadFunctor readFunctor(nntp, buffer);
  35.         bytesRead = readFunctor();
  36.         qDebug() << (nntp.state() == QAbstractSocket::ConnectedState);
  37.         qDebug() << "bytesRead: "<<bytesRead;
  38.         m_bytesAll += bytesRead;
  39.         emit bytesReadSignal(m_bytesAll);
  40.         breakCount = streamWriter(buffer);
  41.  
  42.         //
  43.         // Note, when breakCount >= count, there will be no more
  44.         // incoming data and so we can safely break out and not bother
  45.         // issuing a waitForReadyRead
  46.         //
  47.     } while (breakCount < count && bytesRead > 0);
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement