import java.util.concurrent.LinkedBlockingQueue; import java.util.logging.Logger; /** * The Class PeerUploader. * * @author Deepak, Mike, Josh */ public class PeerUploader extends Thread{ /** The Constant log. */ public static final Logger log = Log2.getLogger(PeerUploader.class); /** The upload queue. */ LinkedBlockingQueue<Message.Request> uploadQueue = null; /** The peer. */ public Peer peer; /** The is running. */ public boolean isRunning = false; /** * Instantiates a new peer uploader. * * @param peer the peer */ PeerUploader(Peer peer){ this.peer = peer; this.uploadQueue = new LinkedBlockingQueue<Message.Request>(); } /** * Recieve request. * * @param message the message */ public void recieveRequest(Message.Request message) { if (message == null) { log.warning("Null messages should not be handed to the uploader."); return; } this.uploadQueue.add(message); log.info("Added Message: " + message); } /* (non-Javadoc) * @see java.lang.Thread#run() */ public void run(){ Message.Request requestMessage = null; while(this.isRunning == true){ if(this.peer.weAreChokingPeer == false){ try { if (( requestMessage = this.uploadQueue.take()) != null) { try { byte[] dataToUpload; dataToUpload = this.peer.manager.readFile(requestMessage.index, requestMessage.start, requestMessage.mlength); Tracker.uploaded += dataToUpload.length; this.peer.uploadRate += dataToUpload.length; this.peer.sendMessage(new Message.Piece(requestMessage.index, requestMessage.start, dataToUpload)); peer.totalUpload += dataToUpload.length; peer.rateCalculatorTotalUpload += dataToUpload.length; peer.manager.rateCalculatorTotalUpload+= dataToUpload.length; //peer.manager.tracker.uploaded += dataToUpload.length; RUBTClient.addAmountUploaded(dataToUpload.length); } catch(Exception e){ log.severe("Error uploading to Peer: " + this.peer); } } } catch (InterruptedException e) { break; } } else{ try { Thread.sleep(250); } catch (InterruptedException e) { break; } } } } }