@Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Peer peer = (Peer) o; return peerId.equals(peer.getPeerId()); }
@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; }
@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; }
/** * call back from PeerHandlerGroup * @param peer disconnected peer */ @Override public void peerDisconnected(Peer peer) { buckets[getBucketId(peer)].dropPeer(peer); peerStore.remove(peer.getPeerId()); } }
@Test public void compareTest() { DistanceComparator distanceComparator = new DistanceComparator(OWNER.getPeerId().getBytes()); Peer p1 = Peer.valueOf("ynode://75bff16c@127.0.0.1:32919"); Peer p2 = Peer.valueOf("ynode://75bff16c@127.0.0.1:32922"); int shortDistance = OWNER.getPeerId().distanceTo(p1.getPeerId().getBytes()); int longDistance = OWNER.getPeerId().distanceTo(p2.getPeerId().getBytes()); assert shortDistance < longDistance; assert distanceComparator.compare(p1, p2) < 0; ArrayList<Peer> peerArrayList = new ArrayList<>(); peerArrayList.add(p2); peerArrayList.add(p1); peerArrayList.sort(distanceComparator); assert peerArrayList.get(0).equals(p1); assert peerArrayList.get(0).getPeerId().distanceTo(OWNER.getPeerId().getBytes()) == shortDistance; }
@Test public void shouldBeGotPeer() { peerStore = new PeerStore(new LevelDbDataSource(StoreTestUtils.getTestPath(), "peers")); Peer peer = Peer.valueOf("ynode://75bff16c@127.0.0.1:32918"); peerStore.put(peer.getPeerId(), peer); assertThat(peerStore.contains(peer.getPeerId())).isTrue(); Peer foundPeer = peerStore.get(peer.getPeerId()); assertThat(foundPeer).isEqualTo(peer); }
Peer peer = Peer.valueOf(uri + i); peerArrayList.add(peer); int distance = seedPeer.getPeerId().distanceTo(peer.getPeerId().getBytes()) - 1; result.put(String.valueOf(peer.getPort()), distance); log.debug("peer port => " + peer.getPort() + ", distance => " + distance); new DistanceComparator(seedPeer.getPeerId().getBytes());
@Test public void shouldBeGotAllPeer() { peerStore = new PeerStore(new HashMapDbSource()); Peer peer = Peer.valueOf("ynode://75bff16c@127.0.0.1:32918"); peerStore.put(peer.getPeerId(), peer); assertThat(peerStore.getAll().size()).isEqualTo(1); } }