Advertisement
benhj

readFromSocket code

May 21st, 2013
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. void
  2. NNTPConnector::readFromSocket(std::ostream &writeToMe, int const count,
  3.                               std::string const &escapeSequence)
  4. {
  5.     //int breakCountMem = 0;
  6.     qint64 bytesRead = 0;
  7.     int breakCount = 0;
  8.     int escapeIterator = 0;
  9.     do {
  10.         do {
  11.             std::vector<char> buffer;
  12.             int bytesAvailable = nntp.bytesAvailable();
  13.             qDebug() << "bytesAvailable: "<<bytesAvailable;
  14.             if(bytesAvailable <= 0) {
  15.                 break;
  16.             }
  17.             buffer.resize(bytesAvailable);
  18.             qDebug() << "error A: "<<nntp.errorString();
  19.             bytesRead = nntp.read(&buffer[0], bytesAvailable);
  20.             qDebug() << "error B: "<<nntp.errorString();
  21.             qDebug() << (nntp.state() == QAbstractSocket::ConnectedState);
  22.             qDebug() << "bytesRead: "<<bytesRead;
  23.             bytesAvailable = nntp.bytesAvailable();
  24.             qDebug() << "bytesAvailable after (sanity check): "<<bytesAvailable;
  25.  
  26.  
  27.             //
  28.             // The following loop both writes to the ostream and checks
  29.             // to see how many escape sequences have been encountered
  30.             //
  31.             std::vector<char>::iterator it;
  32.             for(it = buffer.begin(); it != buffer.end(); ++it) {
  33.                 writeToMe << *it;
  34.  
  35.                 if(*it == escapeSequence.at(escapeIterator)) {
  36.                     if(escapeIterator == escapeSequence.size() - 1) {
  37.                         ++breakCount;
  38.                         emit readOneBitOfDataSignal();
  39.                         escapeIterator = 0;
  40.                     } else {
  41.                         ++escapeIterator;
  42.                     }
  43.                 } else {
  44.                     escapeIterator = 0;
  45.                     if(*it == escapeSequence.at(escapeIterator)) {
  46.                         ++escapeIterator;
  47.                     }
  48.                 }
  49.  
  50.             }
  51.  
  52.             m_bytesAll += bytesRead;
  53.             emit bytesReadSignal(m_bytesAll);
  54.  
  55.         } while (bytesRead > 0);
  56.  
  57.         if(breakCount >= count) {
  58.             break;
  59.         }
  60.  
  61.     } while (nntp.waitForReadyRead(2000));
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement