use of io.nuls.protocol.model.GetBlocksByHashParam in project nuls by nuls-io.
the class GetBlocksByHashHandler method onMessage.
@Override
public void onMessage(GetBlocksByHashMessage message, Node fromNode) {
if (message == null || message.getMsgBody() == null || fromNode == null) {
return;
}
GetBlocksByHashParam param = message.getMsgBody();
if (param.getStartHash() == null || param.getEndHash() == null) {
return;
}
NulsDigestData requestHash = null;
try {
requestHash = NulsDigestData.calcDigestData(param.serialize());
} catch (IOException e) {
e.printStackTrace();
}
// react request
messageBusService.sendToNode(new ReactMessage(requestHash), fromNode, true);
BlockHeader startBlockHeader = blockService.getBlockHeader(param.getStartHash()).getData();
if (startBlockHeader == null) {
sendNotFound(requestHash, fromNode);
return;
}
Block endBlock = blockService.getBlock(param.getEndHash()).getData();
if (endBlock == null) {
sendNotFound(requestHash, fromNode);
return;
}
if (endBlock.getHeader().getHeight() - startBlockHeader.getHeight() >= MAX_SIZE) {
return;
}
Block block = endBlock;
while (true) {
sendBlock(block, fromNode);
if (block.getHeader().getHash().equals(startBlockHeader.getHash())) {
break;
}
Result<Block> result = blockService.getBlock(block.getHeader().getPreHash());
if (result.isFailed() || (block = result.getData()) == null) {
sendNotFound(requestHash, fromNode);
return;
}
}
CompleteMessage completeMessage = new CompleteMessage();
completeMessage.setMsgBody(new CompleteParam(requestHash, true));
messageBusService.sendToNode(completeMessage, fromNode, true);
}
Aggregations