public List<String> getAllPeersFromBucketsOf() { return getAllPeers() .stream() .map(p -> String.format("%s:%d", p.getHost(), p.getPort())) .collect(Collectors.toList()); }
@Override public void broadcastBlock(BlockHusk block) { log.info("*** Broadcasting blocks -> {}", peer.getHost() + ":" + peer.getPort()); asyncBlockChainStub.broadcastBlock(block.getInstance()); } }
@Override public void addHandler(Peer owner, Peer requestPeer) { PeerHandler peerHandler = peerHandlerFactory.create(requestPeer); if (handlerMap.containsKey(requestPeer.toAddress())) { return; } try { log.info("Connecting... peer {}:{}", requestPeer.getHost(), requestPeer.getPort()); String pong = peerHandler.ping("Ping", owner); // TODO validation peer if ("Pong".equals(pong)) { handlerMap.put(requestPeer.toAddress(), peerHandler); log.info("Added size={}, handler={}", handlerMap.size(), requestPeer.toAddress()); } else { // 접속 실패 시 목록 및 버킷에서 제거 peerEventListener.peerDisconnected(requestPeer); } } catch (Exception e) { log.warn("Fail to add to the peer handler err=" + e.getMessage()); } }
GRpcPeerHandler(Peer peer) { this(ManagedChannelBuilder.forAddress(peer.getHost(), peer.getPort()).usePlaintext() .build(), peer); }
@Test public void createPeerTest() { Peer peer = Peer.valueOf("ynode://75bff16c22e6b38c71fd2005657827acce3dfd4a1db1cc417303e42" + "9d7da9625525ba3f1b7794e104397467f8c5a11c8e86af4ffcc0aefcdf7024013cdc0508d" + "@yggdrash-node1:32918"); assertThat(peer.getHost()).isEqualTo("yggdrash-node1"); assertThat(peer.getPort()).isEqualTo(32918); }
@Override public List<Peer> findPeers(Peer peer) { Proto.RequestPeer requestPeer = Proto.RequestPeer.newBuilder() .setPubKey(peer.getPubKey().toString()) .setIp(peer.getHost()) .setPort(peer.getPort()) .addAllBestBlocks(bestBlocksByPeer(peer)) .build(); return blockingPeerStub.findPeers(requestPeer).getPeersList().stream() .map(peerInfo -> Peer.valueOf(peerInfo.getUrl())) .collect(Collectors.toList()); }
protected ManagedChannel createChannel(Peer peer) { return ManagedChannelBuilder.forAddress(peer.getHost(), peer.getPort()).usePlaintext() .build(); }
@Test public void findPeers() { PeerGrpc.PeerBlockingStub blockingStub = PeerGrpc.newBlockingStub( grpcServerRule.getChannel()); Peer peer = Peer.valueOf("ynode://75bff16c@127.0.0.1:32918"); Proto.BestBlock bestBlock = Proto.BestBlock.newBuilder() .setBranch(ByteString.copyFrom(TestConstants.STEM.getBytes())) .setIndex(0).build(); Proto.RequestPeer requestPeer = Proto.RequestPeer.newBuilder() .setPubKey(peer.getPubKey().toString()) .setIp(peer.getHost()) .setPort(peer.getPort()) .addBestBlocks(bestBlock) .build(); Proto.PeerList peerList = blockingStub.findPeers(requestPeer); assertEquals(0, peerList.getPeersCount()); } }