コード例 #1
0
void HearthstoneLogWatcher::CheckForLogChanges() {
  QFile file( mPath );
  if( !file.open( QIODevice::ReadOnly ) ) {
    return;
  }

  qint64 size = file.size();
  if( size < mLastSeekPos ) {
    DBG( "Log truncation detected. This is OK if game was restarted." );
    mLastSeekPos = 0;
  } else {
    // Use raw QFile instead of QTextStream
    // QTextStream uses buffering and seems to skip some lines (see also QTextStream#pos)
    file.seek( mLastSeekPos );

    QByteArray buf = file.readAll();
    QList< QByteArray > lines = buf.split('\n');

    QByteArray lastLine = lines.takeLast();
    for( const QByteArray& line : lines ) {
      emit LineAdded( QString::fromUtf8( line.trimmed() ) );
    }

    mLastSeekPos = file.pos() - lastLine.size();
  }
}
コード例 #2
0
HearthstoneLogTracker::HearthstoneLogTracker()
  : mTurnCounter( 0 ), mHeroPowerUsed( false ), mHeroPlayerId( 0 ), mLegendTracked( false )
{
  qRegisterMetaType< ::CardHistoryList >( "CardHistoryList" );

  for( int i = 0; i < NUM_LOG_MODULES; i++ ) {
    const char *moduleName = LOG_MODULE_NAMES[ i ];
    QString logPath = Hearthstone::Instance()->LogPath( QString( "%1.log" ).arg( moduleName ) );

    HearthstoneLogWatcher *logWatcher = new HearthstoneLogWatcher( this, logPath );
    connect( logWatcher, SIGNAL( LineAdded(QString) ), this, SLOT( HandleLogLine(QString) ) );
    mLogWatchers.push_back( logWatcher );
  }

  Reset();
}