Newer
Older
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package fucoin.actions.search;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import akka.actor.ActorRef;
import akka.actor.UntypedActorContext;
import fucoin.Wallet;
//Used to return a Wallet reference (akka-style string which can
// be transformed to an ActorRef)
public class ActionSearchWalletReference extends Search{
public final String name;
public final List<ActorRef> ttl = new ArrayList<ActorRef>();
public ActionSearchWalletReference(String name) {
this.name = name;
}
@Override
protected void onAction(ActorRef sender, ActorRef self,
UntypedActorContext context, Wallet wallet) {
log(wallet.getKnownNeighbors()+"contains "+name+"?");
ttl.add(self);
ActionSearchWalletReferenceAnswer answer = null;
if(this.name.equals(wallet.getName())){
answer = new ActionSearchWalletReferenceAnswer(name,wallet.getAddress(),ttl);
}else if(wallet.backedUpNeighbors.containsKey(name)){
answer = new ActionSearchWalletReferenceAnswer(name,wallet.backedUpNeighbors.get(name).getAddress(),ttl);
} else if(wallet.getKnownNeighbors().containsKey(name)){
answer = new ActionSearchWalletReferenceAnswer(name,wallet.getAddress(wallet.getKnownNeighbors().get(name)),ttl);
} else if (ttl.size()<5){
for(ActorRef neighbor : wallet.getKnownNeighbors().values()){
if(!ttl.contains(neighbor)){
neighbor.tell(this, self);
}
}
}
//System.out.println("ttl:"+ttl.size());
//User unknown by this Wallet
if(answer!=null&&ttl.size()>0){
ttl.get(ttl.size()-1).tell(answer, self);
}
}
}