-
Notifications
You must be signed in to change notification settings - Fork 45
/
GetPeers.java
82 lines (55 loc) · 2.05 KB
/
GetPeers.java
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package the8472.mldht.cli.commands;
import the8472.mldht.cli.CommandProcessor;
import the8472.mldht.cli.ParseArgs;
import lbms.plugins.mldht.kad.DHT;
import lbms.plugins.mldht.kad.Key;
import lbms.plugins.mldht.kad.tasks.PeerLookupTask;
import lbms.plugins.mldht.utils.NIOConnectionManager;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
public class GetPeers extends CommandProcessor {
NIOConnectionManager conMan;
ScheduledThreadPoolExecutor timer;
@Override
protected void process() {
boolean fast = ParseArgs.extractBool(arguments, "-fast");
boolean nocache = ParseArgs.extractBool(arguments, "-nocache");
List<Key> hashes = arguments.stream()
.filter(Key.STRING_PATTERN.asPredicate())
.map(st -> new Key(st))
.collect(Collectors.toCollection(ArrayList::new));
if(hashes.isEmpty())
hashes.add(Key.createRandomKey());
AtomicInteger counter = new AtomicInteger();
Instant start = Instant.now();
hashes.forEach(h -> {
dhts.stream().filter(DHT::isRunning).map(DHT::getServerManager).map(m -> m.getRandomActiveServer(false)).filter(Objects::nonNull).forEach(d -> {
DHT dht = d.getDHT();
PeerLookupTask t = new PeerLookupTask(d, dht.getNode(), h);
t.setNoAnnounce(true);
t.setFastTerminate(fast);
t.useCache(!nocache);
counter.incrementAndGet();
t.addListener(unused -> {
if(counter.decrementAndGet() == 0)
exit(0);
});
//t.useCache(false);
t.setResultHandler((source, item) -> {
Formatter f = new Formatter();
Duration elapsed = Duration.between(start, Instant.now());
f.format("%-5dms %s %s from: %s", elapsed.toMillis(), h.toString(), item.toString(), source);
println(f.toString());
});
dht.getTaskManager().addTask(t);
});
});
}
}