package net.dirtyfilthy.Bitten;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.concurrent.CountDownLatch;
import javax.swing.event.EventListenerList;
import com.google.bitcoin.core.BlockChain;
import com.google.bitcoin.core.BlockChainListener;
import com.google.bitcoin.core.DnsDiscovery;
import com.google.bitcoin.core.IrcDiscovery;
import com.google.bitcoin.core.NetworkConnection;
import com.google.bitcoin.core.NetworkParameters;
import com.google.bitcoin.core.Peer;
import com.google.bitcoin.core.PeerDiscovery;
import com.google.bitcoin.core.PeerDiscoveryException;
import com.google.bitcoin.core.ProtocolException;
import com.google.bitcoin.core.SeedPeers;
import com.google.bitcoin.core.StoredBlock;
public class BlockChainDownloader extends Thread {
CountDownLatch latch;
private BlockChain blockChain;
public BlockChainDownloader(BlockChain b) {
blockChain=b;
}
public void run(){
PeerDiscovery peerDiscovery=new DnsDiscovery(NetworkParameters.prodNet());
try {
while(true){
InetSocketAddress addresses[]=peerDiscovery.getPeers();
//InetSocketAddress addresses[]={new InetSocketAddress("localhost",8333)};
System.out.println("peers "+addresses.length);
NetworkConnection conn;
Peer peer;
System.out.println("connecting to peers");
for(InetSocketAddress a : addresses){
try {
System.out.println("Trying "+a);
conn=new NetworkConnection(a.getAddress(),Bitten.networkParameters,blockChain.getChainHead().getHeight(),3000);
System.out.println("after network connection");
peer=new Peer(Bitten.networkParameters,conn,blockChain);
System.out.println("starting chain download");
peer.start();
peer.startBlockChainDownload();
while(true){
if(!peer.running()){
System.out.println("peer stopped!");
break;
}
sleep(1000);
}
} catch (IOException e) {
System.out.println(e);
continue;
} catch (ProtocolException e) {
continue;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
continue;
}
}
}
} catch (PeerDiscoveryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}