Search in sources :

Example 36 with Node

use of io.nuls.network.model.Node in project nuls by nuls-io.

the class OrphanBlockProcess method foundAndProcessPreviousBlock.

private void foundAndProcessPreviousBlock(BlockContainer blockContainer) {
    BlockHeader blockHeader = blockContainer.getBlock().getHeader();
    // Determine whether the previous block already exists. If it already exists, it will not be downloaded.
    // 判断上一区块是否已经存在,如果已经存在则不下载
    boolean hasExist = checkHasExist(blockHeader.getPreHash());
    if (hasExist) {
        return;
    }
    Block preBlock = downloadService.downloadBlock(blockHeader.getPreHash(), blockContainer.getNode()).getData();
    if (preBlock != null) {
        ChainLog.debug("get pre block success {} - {}", preBlock.getHeader().getHeight(), preBlock.getHeader().getHash());
        orphanBlockProvider.addBlock(new BlockContainer(preBlock, blockContainer.getNode(), BlockContainerStatus.DOWNLOADING));
    } else {
        ChainLog.debug("get pre block fail {} - {}", blockHeader.getHeight() - 1, blockHeader.getPreHash());
        // 失败情况的处理,从其它所有可用的节点去获取,如果都不成功,那么就失败,包括本次失败的节点,再次获取一次
        for (Node node : networkService.getAvailableNodes()) {
            preBlock = downloadService.downloadBlock(blockHeader.getPreHash(), node).getData();
            if (preBlock != null) {
                orphanBlockProvider.addBlock(new BlockContainer(preBlock, node, BlockContainerStatus.DOWNLOADING));
                ChainLog.debug("get pre block retry success {} - {}", preBlock.getHeader().getHeight() - 1, preBlock.getHeader().getPreHash());
                return;
            }
        }
        ChainLog.debug("get pre block complete failure {} - {}", blockHeader.getHeight() - 1, blockHeader.getPreHash());
    }
}
Also used : BlockContainer(io.nuls.consensus.poc.container.BlockContainer) Node(io.nuls.network.model.Node) Block(io.nuls.kernel.model.Block) BlockHeader(io.nuls.kernel.model.BlockHeader)

Example 37 with Node

use of io.nuls.network.model.Node in project nuls by nuls-io.

the class P2pNodeMessageHandler method process.

@Override
public NetworkEventResult process(BaseMessage message, Node node) {
    P2PNodeMessage nodeMessage = (P2PNodeMessage) message;
    P2PNodeBody nodeBody = nodeMessage.getMsgBody();
    if (!IpUtil.isboolIp(nodeBody.getNodeIp())) {
        return null;
    }
    Node newNode = new Node(nodeBody.getNodeIp(), nodeBody.getSeverPort(), Node.OUT);
    nodeManager.addNeedCheckNode(newNode);
    return null;
}
Also used : P2PNodeMessage(io.nuls.network.protocol.message.P2PNodeMessage) P2PNodeBody(io.nuls.network.protocol.message.P2PNodeBody) Node(io.nuls.network.model.Node)

Example 38 with Node

use of io.nuls.network.model.Node in project nuls by nuls-io.

the class NodeDiscoverTask method processFailNodes.

private void processFailNodes() {
    try {
        NodesContainer nodesContainer = nodeManager.getNodesContainer();
        Map<String, Node> canConnectNodes = nodesContainer.getCanConnectNodes();
        while (true) {
            Map<String, Node> failNodes = nodesContainer.getFailNodes();
            if (failNodes.size() > 0) {
                probeNodes(failNodes, canConnectNodes);
            }
            Thread.sleep(3000L);
        }
    } catch (Exception e) {
        Log.error(e);
        try {
            Thread.sleep(3000L);
        } catch (InterruptedException e1) {
            Log.error(e1);
        }
    }
}
Also used : NodesContainer(io.nuls.network.netty.container.NodesContainer) Node(io.nuls.network.model.Node)

Example 39 with Node

use of io.nuls.network.model.Node in project nuls by nuls-io.

the class NodeDiscoverTask method processNodes.

private void processNodes() {
    NodesContainer nodesContainer = nodeManager.getNodesContainer();
    Map<String, Node> canConnectNodes = nodesContainer.getCanConnectNodes();
    Map<String, Node> uncheckNodes = nodesContainer.getUncheckNodes();
    Map<String, Node> disconnectNodes = nodesContainer.getDisconnectNodes();
    if (uncheckNodes.size() > 0) {
        probeNodes(uncheckNodes, canConnectNodes);
    }
    if (disconnectNodes.size() > 0) {
        probeNodes(disconnectNodes, canConnectNodes);
    }
}
Also used : NodesContainer(io.nuls.network.netty.container.NodesContainer) Node(io.nuls.network.model.Node)

Example 40 with Node

use of io.nuls.network.model.Node in project nuls by nuls-io.

the class RunOnceAfterStartupTask method shareMyServer.

private void shareMyServer() {
    String externalIp = getMyExtranetIp();
    if (externalIp == null) {
        return;
    }
    Log.info("my external ip  is {}", externalIp);
    networkParam.getLocalIps().add(externalIp);
    Node myNode = new Node(externalIp, networkParam.getPort(), Node.OUT);
    myNode.setConnectedListener(() -> {
        myNode.getChannel().close();
        doShare(externalIp);
    });
    myNode.setDisconnectListener(() -> myNode.setChannel(null));
    connectionManager.connection(myNode);
}
Also used : Node(io.nuls.network.model.Node)

Aggregations

Node (io.nuls.network.model.Node)48 Result (io.nuls.kernel.model.Result)4 NodesContainer (io.nuls.network.netty.container.NodesContainer)4 Block (io.nuls.kernel.model.Block)3 NulsDigestData (io.nuls.kernel.model.NulsDigestData)3 RpcClientResult (io.nuls.kernel.model.RpcClientResult)3 BroadcastResult (io.nuls.network.model.BroadcastResult)3 BlockMessage (io.nuls.protocol.message.BlockMessage)3 ApiOperation (io.swagger.annotations.ApiOperation)3 ApiResponses (io.swagger.annotations.ApiResponses)3 IOException (java.io.IOException)3 GET (javax.ws.rs.GET)3 Path (javax.ws.rs.Path)3 Produces (javax.ws.rs.Produces)3 Test (org.junit.Test)3 ByteBuf (io.netty.buffer.ByteBuf)2 SocketChannel (io.netty.channel.socket.SocketChannel)2 TooLongFrameException (io.netty.handler.codec.TooLongFrameException)2 NodeMessageBody (io.nuls.network.protocol.message.NodeMessageBody)2 NodesMessage (io.nuls.network.protocol.message.NodesMessage)2