@Override public int hashCode() { return Arrays.hashCode(peerId.getBytes()); }
@Override public boolean contains(PeerId key) { if (db.get(key.getBytes()) != null) { return true; } return peers.containsKey(key); }
public void remove(PeerId key) { peers.remove(key); db.delete(key.getBytes()); }
void setDistance(Peer owner) { this.distance = owner.peerId.distanceTo(peerId.getBytes()); }
@Override public void put(PeerId key, Peer value) { peers.put(key, value); db.put(key.getBytes(), value.toString().getBytes()); }
@Override public Peer get(PeerId key) { byte[] foundedValue = db.get(key.getBytes()); if (foundedValue != null) { return Peer.valueOf(foundedValue); } return peers.get(key); }
@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; }
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 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 of() { PeerId peerId1 = PeerId.of(ynodeUri1); byte[] b = peerId1.getBytes(); PeerId peerId2 = PeerId.of(b); assert peerId1.equals(peerId2); }