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());
}
}
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;
}
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);
}
}
}
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);
}
}
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);
}
Aggregations