@Override public List<String> getPeerUriList() { return getAllPeers().stream() .map(Peer::getYnodeUri).collect(Collectors.toList()); }
@Override public List<Peer> getBootstrappingSeedList() { List<Peer> seedPeerList; if (peerStore.size() > 1) { seedPeerList = getClosestPeers(KademliaOptions.BUCKET_SIZE); } else if (this.seedPeerList != null) { seedPeerList = this.seedPeerList.stream().map(Peer::valueOf) .collect(Collectors.toList()); } else { seedPeerList = new ArrayList<>(); } return seedPeerList; }
public List<String> getPeers(Peer peer) { List<String> peerList = getPeerUriList(); addPeer(peer); return peerList; }
public static PeerTable createPeerTable(int port) { Peer owner = Peer.valueOf(NODE_URI_PREFIX + port); PeerTable peerTable = new KademliaPeerTable(owner, storeBuilder.buildPeerStore()); List<String> seedList = Collections.singletonList(NODE_URI_PREFIX + 32918); peerTable.setSeedPeerList(seedList); return peerTable; } }
@Override public synchronized Peer addPeer(Peer p) { p.setDistance(owner); Peer lastSeen = buckets[getBucketId(p)].addPeer(p); if (lastSeen != null) { return lastSeen; } if (!peerStore.contains(p.getPeerId())) { peerStore.put(p.getPeerId(), p); log.debug("Added peerStore size={}, peer={}", count(), p.toAddress()); } return null; }
@Override public Map<Integer, List<Peer>> getBucketIdAndPeerList() { Map<Integer, List<Peer>> res = new LinkedHashMap<>(); if (getBucketsCount() > 0) { int i = 0; for (PeerBucket b : buckets) { if (b.getPeersCount() > 0) { res.put(i, new ArrayList<>(b.getPeers())); } i++; } } return res; }
@Override public synchronized void touchPeer(Peer p) { if (!contains(p)) { return; } for (PeerBucket b : buckets) { Peer found = b.findByPeer(p); if (found != null) { found.touch(); break; } } }
/** * call back from PeerHandlerGroup * @param peer disconnected peer */ @Override public void peerDisconnected(Peer peer) { buckets[getBucketId(peer)].dropPeer(peer); peerStore.remove(peer.getPeerId()); } }
private void init() { buckets = new PeerBucket[KademliaOptions.BINS]; for (int i = 0; i < KademliaOptions.BINS; i++) { buckets[i] = new PeerBucket(i); } if (this.peerStore.size() > 0) { this.peerStore.getAll().forEach(s -> addPeer(Peer.valueOf(s))); } }
@Bean PeerTable peerTable(Wallet wallet, StoreBuilder storeBuilder) { Peer owner = Peer.valueOf(wallet.getNodeId(), nodeProperties.getGrpc().getHost(), nodeProperties.getGrpc().getPort()); PeerStore peerStore = storeBuilder.buildPeerStore(); PeerTable peerTable = new KademliaPeerTable(owner, peerStore); peerTable.setSeedPeerList(nodeProperties.getSeedPeerList()); return peerTable; }
public List<String> getAllPeersFromBucketsOf() { return getAllPeers() .stream() .map(p -> String.format("%s:%d", p.getHost(), p.getPort())) .collect(Collectors.toList()); }
@Override public synchronized List<Peer> getClosestPeers(int maxPeers) { List<Peer> closestEntries = getAllPeers(); closestEntries.remove(owner); closestEntries.sort(new DistanceComparator(owner.getPeerId().getBytes())); if (closestEntries.size() > maxPeers) { closestEntries = closestEntries.subList(0, maxPeers); } return closestEntries; }