package org.jgroups.protocols; import org.jgroups.Global; import org.jgroups.Header; import org.jgroups.util.Bits; import java.io.DataInput; import java.io.DataOutput; import java.util.function.Supplier; /** * Used to send discovery requests and responses * @author Bela Ban */ public class PingHeader extends Header { public static final byte GET_MBRS_REQ=1; public static final byte GET_MBRS_RSP=2; protected byte type; protected String cluster_name; protected boolean initial_discovery; public PingHeader() { } public PingHeader(byte type) {this.type=type;} public byte type() {return type;} public PingHeader clusterName(String name) {this.cluster_name=name; return this;} public boolean initialDiscovery() {return initial_discovery;} public PingHeader initialDiscovery(boolean b) {this.initial_discovery=b; return this;} public short getMagicId() {return 53;} public Supplier<? extends Header> create() {return PingHeader::new;} public int serializedSize() { int retval=Global.BYTE_SIZE *3; // type, cluster_name presence and initial_discovery if(cluster_name != null) retval += cluster_name.length() +2; return retval; } public String toString() { return String.format("[%s cluster=%s initial_discovery=%b]", type2Str(type), cluster_name, initial_discovery); } static String type2Str(byte t) { switch(t) { case GET_MBRS_REQ: return "GET_MBRS_REQ"; case GET_MBRS_RSP: return "GET_MBRS_RSP"; default: return "<unkown type (" + t + ")>"; } } public void writeTo(DataOutput out) throws Exception { out.writeByte(type); Bits.writeString(cluster_name,out); out.writeBoolean(initial_discovery); } public void readFrom(DataInput in) throws Exception { type=in.readByte(); cluster_name=Bits.readString(in); initial_discovery=in.readBoolean(); } }