/** * $Id: HeartbeatData.java 1835 2013-05-16 02:00:50Z shijia.wxr $ */ package com.alibaba.rocketmq.common.protocol.heartbeat; import java.util.HashSet; import java.util.Set; import com.alibaba.rocketmq.common.protocol.MQProtos.ConsumerInfo; import com.alibaba.rocketmq.common.protocol.MQProtos.HeartbeatInfo; import com.alibaba.rocketmq.common.protocol.MQProtos.ProducerInfo; import com.google.protobuf.InvalidProtocolBufferException; /** * @author vintage.wang@gmail.com shijia.wxr@taobao.com * */ public class HeartbeatData { private String clientID; private Set<ProducerData> producerDataSet = new HashSet<ProducerData>(); private Set<ConsumerData> consumerDataSet = new HashSet<ConsumerData>(); public byte[] encode() { HeartbeatInfo.Builder builder = HeartbeatInfo.newBuilder(); // clientID builder.setClientID(this.clientID); // producerDataSet if (this.producerDataSet != null) { int i = 0; for (ProducerData data : this.producerDataSet) { builder.addProducerInfos(i++, data.encode()); } } // consumerDataSet if (this.consumerDataSet != null) { int i = 0; for (ConsumerData data : this.consumerDataSet) { builder.addConsumerInfos(i++, data.encode()); } } return builder.build().toByteArray(); } public static HeartbeatData decode(byte[] data) throws InvalidProtocolBufferException { if (data != null) { HeartbeatData heartbeatData = new HeartbeatData(); HeartbeatInfo pbClientHeartbeat = HeartbeatInfo.parseFrom(data); // clientID heartbeatData.setClientID(pbClientHeartbeat.getClientID()); // producerDataSet { for (ProducerInfo info : pbClientHeartbeat.getProducerInfosList()) { heartbeatData.getProducerDataSet().add(ProducerData.decode(info)); } } // ConsumerData { for (ConsumerInfo info : pbClientHeartbeat.getConsumerInfosList()) { heartbeatData.getConsumerDataSet().add(ConsumerData.decode(info)); } } return heartbeatData; } return null; } public String getClientID() { return clientID; } public void setClientID(String clientID) { this.clientID = clientID; } public Set<ProducerData> getProducerDataSet() { return producerDataSet; } public void setProducerDataSet(Set<ProducerData> producerDataSet) { this.producerDataSet = producerDataSet; } public Set<ConsumerData> getConsumerDataSet() { return consumerDataSet; } public void setConsumerDataSet(Set<ConsumerData> consumerDataSet) { this.consumerDataSet = consumerDataSet; } @Override public String toString() { return "HeartbeatData [clientID=" + clientID + ", producerDataSet=" + producerDataSet + ", consumerDataSet=" + consumerDataSet + "]"; } }