root / src / chord / FixFingers.java
History | View | Annotate | Download (1.63 KB)
1 |
package chord; |
---|---|
2 |
|
3 |
import chord.ChordManager; |
4 |
import chord.ConnectionInfo; |
5 |
import messages.LookupMessage; |
6 |
import messages.Message; |
7 |
import messages.MessageForwarder; |
8 |
import messages.SucessorMessage; |
9 |
import peer.Peer; |
10 |
|
11 |
import java.math.BigInteger; |
12 |
import java.net.InetAddress; |
13 |
import java.net.UnknownHostException; |
14 |
import java.util.ArrayList; |
15 |
|
16 |
public class FixFingers implements Runnable { |
17 |
|
18 |
private int index = -1; |
19 |
|
20 |
@Override
|
21 |
public void run() { |
22 |
index++; |
23 |
|
24 |
if(index == ChordManager.getM() ) {
|
25 |
ChordManager.printFingerTable(); |
26 |
index = 0;
|
27 |
} |
28 |
|
29 |
String key = ChordManager.calculateNextKey(ChordManager.peerHash, index, ChordManager.getM() );
|
30 |
ArrayList<ConnectionInfo> fingerTable = ChordManager.getFingerTable();
|
31 |
|
32 |
if(index > (fingerTable.size() - 1)) { |
33 |
try {
|
34 |
fingerTable.add(new ConnectionInfo(ChordManager.peerHash, InetAddress.getLocalHost().getHostAddress(), Peer.port)); |
35 |
} catch (UnknownHostException e) { |
36 |
e.printStackTrace(); |
37 |
} |
38 |
} |
39 |
|
40 |
Message res = null;
|
41 |
try {
|
42 |
res = ChordManager.searchSuccessor2(new ConnectionInfo(new BigInteger(key), InetAddress.getLocalHost().getHostAddress(), Peer.port)); |
43 |
} catch (UnknownHostException e) { |
44 |
e.printStackTrace(); |
45 |
} |
46 |
|
47 |
if(res != null){ |
48 |
if(res instanceof SucessorMessage) { |
49 |
fingerTable.set(index, ((SucessorMessage) res).getCi()); |
50 |
} |
51 |
else if (res instanceof LookupMessage) |
52 |
{ |
53 |
MessageForwarder.sendMessage(res); |
54 |
} |
55 |
} |
56 |
} |
57 |
} |