-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMissingPieceCheckerThread.java
More file actions
36 lines (31 loc) · 1.59 KB
/
MissingPieceCheckerThread.java
File metadata and controls
36 lines (31 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.BitSet;
public class MissingPieceCheckerThread implements Runnable{
@Override
public void run(){
while(PeerApplication.bitSet.cardinality() != ApplicationProperties.getInstance().getTotalPieces()){
try{
Thread.sleep(10000);
BitSet myRequests = (BitSet) PeerApplication.requestedBitSet.clone();
BitSet myPieces = (BitSet) PeerApplication.bitSet.clone();
myRequests.andNot(myPieces);
if(!myRequests.isEmpty()){
PeerApplication.requestedBitSet = (BitSet) PeerApplication.bitSet.clone();
for(int peerId : PeerApplication.peerSocketLookup.keySet()){
Peer peer = PeerApplication.peerLookup.get(peerId);
if(PeerMessageListenerThread.isAnyPieceNeededFrom(peer)){
Socket socket = PeerApplication.peerSocketLookup.get(peerId);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
PeerMessageListenerThread.writeToSocket(dos,
Message.createMessage(Message.TYPE_INTERESTED).toBytes() );
}
}
}
}catch(Exception e){
Logger.logInfo("Error occurred while checking for missing pieces :" + e.getMessage());
}
}
Logger.logInfo("Peer " + PeerApplication.myself.getId() + " has downloaded the complete file");
}
}