org.jgroups.protocols.pbcast.JoinRsp Maven / Gradle / Ivy
Go to download
This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including
all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and
JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up
with different versions on classes on the class path).
package org.jgroups.protocols.pbcast;
import org.jgroups.Constructable;
import org.jgroups.Global;
import org.jgroups.View;
import org.jgroups.util.Digest;
import org.jgroups.util.SizeStreamable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.function.Supplier;
/**
* Result of a JOIN request (sent by the GMS client). Instances of this class are immutable.
*/
public class JoinRsp implements SizeStreamable, Constructable {
protected View view;
protected Digest digest;
protected String fail_reason; /** only set if JOIN failed, e.g. in AUTH */
protected static final byte VIEW_PRESENT = 1 << 0;
protected static final byte DIGEST_PRESENT = 1 << 1;
protected static final byte FAIL_REASON_PRESENT = 1 << 2;
public JoinRsp() {
}
public JoinRsp(View v, Digest d) {
view=v;
digest=d;
}
public JoinRsp(String fail_reason) {this.fail_reason=fail_reason;}
public Supplier extends JoinRsp> create() {
return JoinRsp::new;
}
public View getView() {return view;}
public Digest getDigest() {return digest;}
public String getFailReason() {return fail_reason;}
public JoinRsp setFailReason(String r) {fail_reason=r; return this;}
@Override
public void writeTo(DataOutput out) throws IOException {
byte flags=0;
if(view != null)
flags|=VIEW_PRESENT;
if(digest != null)
flags|=DIGEST_PRESENT;
if(fail_reason != null)
flags|=FAIL_REASON_PRESENT;
out.writeByte(flags);
// 1. view
if(view != null)
view.writeTo(out);
// 2. digest
if(digest != null)
digest.writeTo(out, false); // don't write the membership; it is already present in the view
// 3. fail_reason
if(fail_reason != null)
out.writeUTF(fail_reason);
}
@Override
public void readFrom(DataInput in) throws IOException, ClassNotFoundException {
byte flags=in.readByte();
// 1. view
if((flags & VIEW_PRESENT) == VIEW_PRESENT) {
view=new View();
view.readFrom(in);
}
// 2. digest
if((flags & DIGEST_PRESENT) == DIGEST_PRESENT) {
digest=new Digest(view.getMembersRaw());
digest.readFrom(in, false);
}
// 3. fail_reason
if((flags & FAIL_REASON_PRESENT) == FAIL_REASON_PRESENT)
fail_reason=in.readUTF();
}
@Override
public int serializedSize() {
int retval=Global.BYTE_SIZE; // flags
if(view != null)
retval+=view.serializedSize();
if(digest != null)
retval+=digest.serializedSize(false);
if(fail_reason != null)
retval+=fail_reason.length() +2;
return retval;
}
public String toString() {
StringBuilder sb=new StringBuilder();
if(view != null)
sb.append("view: ").append(view);
if(digest != null)
sb.append(", digest: ").append(digest);
if(fail_reason != null)
sb.append("fail reason: ").append(fail_reason);
return sb.toString();
}
}