Search in sources :

Example 1 with GetBlocksByHashParam

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);
}
Also used : GetBlocksByHashParam(io.nuls.protocol.model.GetBlocksByHashParam) NulsDigestData(io.nuls.kernel.model.NulsDigestData) Block(io.nuls.kernel.model.Block) IOException(java.io.IOException) BlockHeader(io.nuls.kernel.model.BlockHeader) CompleteParam(io.nuls.protocol.model.CompleteParam)

Aggregations

Block (io.nuls.kernel.model.Block)1 BlockHeader (io.nuls.kernel.model.BlockHeader)1 NulsDigestData (io.nuls.kernel.model.NulsDigestData)1 CompleteParam (io.nuls.protocol.model.CompleteParam)1 GetBlocksByHashParam (io.nuls.protocol.model.GetBlocksByHashParam)1 IOException (java.io.IOException)1