package com.limegroup.gnutella.tigertree.dime;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ReadableByteChannel;
import java.util.List;
import org.limewire.nio.statemachine.ReadState;
import com.limegroup.gnutella.dime.AsyncDimeParser;
import com.limegroup.gnutella.dime.DIMERecord;
import com.limegroup.gnutella.tigertree.ThexReader;
import com.limegroup.gnutella.tigertree.HashTree;
import com.limegroup.gnutella.tigertree.HashTreeFactory;
class AsyncTigerTreeReader extends ReadState implements ThexReader {
private final String sha1;
private final long fileSize;
private final String root32;
private final AsyncDimeParser parser;
private final HashTreeFactory tigerTreeFactory;
public AsyncTigerTreeReader(String sha1, long fileSize, String root32,
HashTreeFactory tigerTreeFactory) {
this.sha1 = sha1;
this.fileSize = fileSize;
this.root32 = root32;
this.parser = new AsyncDimeParser();
this.tigerTreeFactory = tigerTreeFactory;
}
@Override
protected boolean processRead(ReadableByteChannel channel, ByteBuffer buffer)
throws IOException {
return parser.process(channel, buffer);
}
public HashTree getHashTree() throws IOException {
List<DIMERecord> records = parser.getRecords();
return tigerTreeFactory.createHashTree(TigerDimeReadUtils.nodesFromRecords(records.iterator(),
fileSize, root32), sha1, fileSize);
}
public long getAmountProcessed() {
return parser.getAmountProcessed();
}
}