void setDistance(Peer owner) { this.distance = owner.peerId.distanceTo(peerId.getBytes()); }
@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()); }
public static PeerId of(byte[] hash) { return new PeerId(hash); }
@Test public void shouldBeSameDistance() { PeerId peerId1 = PeerId.of(ynodeUri1); PeerId peerId2 = PeerId.of(ynodeUri2); assert peerId1.distanceTo(peerId2.getBytes()) == peerId2.distanceTo(peerId1.getBytes()); } }
@Override public int hashCode() { return Arrays.hashCode(peerId.getBytes()); }
public static PeerId of(String ynodeUri) { return of(HashUtil.sha3omit12(ynodeUri.getBytes())); }
@Override public int compare(Peer p1, Peer p2) { int d1 = p1.getPeerId().distanceTo(targetId); int d2 = p2.getPeerId().distanceTo(targetId); return Integer.compare(d1, d2); } }
@Override public boolean contains(PeerId key) { if (db.get(key.getBytes()) != null) { return true; } return peers.containsKey(key); }
private Peer(String ynodeUri) { try { URI uri = new URI(ynodeUri); if (!uri.getScheme().equals(YGGDRASH_NODE_SCHEMA)) { throw new NotValidateException( "expecting URL in the format ynode://PUBKEY@HOST:PORT"); } this.peerId = PeerId.of(ynodeUri); if (uri.getUserInfo() != null) { this.pubKey = new Sha3Hash(uri.getUserInfo()); } this.host = uri.getHost(); this.port = uri.getPort(); this.ynodeUri = ynodeUri; touch(); } catch (URISyntaxException e) { throw new NotValidateException("expecting URL in the format ynode://PUBKEY@HOST:PORT"); } }
@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; }
public void remove(PeerId key) { peers.remove(key); db.delete(key.getBytes()); }
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());
@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; }