Package org.ethereum.net.eth

Source Code of org.ethereum.net.eth.BlocksMessage

package org.ethereum.net.eth;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import org.ethereum.core.Block;
import org.ethereum.util.RLP;
import org.ethereum.util.RLPList;

import static org.ethereum.net.eth.EthMessageCodes.BLOCKS;

/**
* Wrapper around an Ethereum Blocks message on the network
*
* @see org.ethereum.net.eth.EthMessageCodes#BLOCKS
*/
public class BlocksMessage extends EthMessage {

  private List<Block> blocks;

  public BlocksMessage(byte[] encoded) {
    super(encoded);
  }

    public BlocksMessage(List<Block> blocks){
        this.blocks = blocks;
        parsed = true;
    }

  private void parse() {
    RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);

    blocks = new ArrayList<>();
    for (int i = 1; i < paramsList.size(); ++i) {
      RLPList rlpData = ((RLPList) paramsList.get(i));
      Block blockData = new Block(rlpData.getRLPData());
      blocks.add(blockData);
    }
    parsed = true;
  }

    private void encode() {

        List<byte[]> encodedElements = new Vector<>();
        encodedElements.add(RLP.encodeByte(BLOCKS.asByte()));

        for (Block block : blocks){
            encodedElements.add(block.getEncoded());
        }

        byte[][] encodedElementArray = encodedElements
                .toArray(new byte[encodedElements.size()][]);

        this.encoded = RLP.encodeList(encodedElementArray);
    }


  @Override
  public byte[] getEncoded() {
        if (encoded == null) encode();
    return encoded;
  }

  public List<Block> getBlocks() {
    if (!parsed) parse();
    return blocks;
  }

    @Override
    public EthMessageCodes getCommand(){
        return EthMessageCodes.BLOCKS;
    }

  @Override
  public Class<?> getAnswerMessage() {
    return null;
  }

  public String toString() {
    if (!parsed) parse();

    StringBuffer sb = new StringBuffer();
    for (Block blockData : this.getBlocks()) {
      sb.append("\n   ").append(blockData.toFlatString());
    }
    return "[" + getCommand().name() + sb.toString() + "]";
  }
}
TOP

Related Classes of org.ethereum.net.eth.BlocksMessage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.