All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jgroups.protocols.tom.ToaHeader 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).

There is a newer version: 33.0.2.Final
Show newest version
package org.jgroups.protocols.tom;

import org.jgroups.Address;
import org.jgroups.Global;
import org.jgroups.Header;
import org.jgroups.util.Bits;
import org.jgroups.util.Util;

import java.io.DataInput;
import java.io.DataOutput;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

/**
 * The header for the Total Order Anycast (TOA) protocol
 *
 * @author Pedro Ruivo
 * @since 3.1
 */
public class ToaHeader extends Header {

    //type
    public static final byte DATA_MESSAGE = 1 << 0;
    public static final byte PROPOSE_MESSAGE = 1 << 1;
    public static final byte FINAL_MESSAGE = 1 << 2;
    public static final byte SINGLE_DESTINATION_MESSAGE = 1 << 3;

    private byte type = 0;
    private MessageID messageID; //address and sequence number
    private long sequencerNumber;
    private Collection
destinations; public ToaHeader() { } private ToaHeader(MessageID messageID, byte type) { this.messageID = messageID; this.type = type; } public MessageID getMessageID() { return messageID; } private ToaHeader setDestinations(Collection
addresses) { this.destinations = addresses; return this; } public Collection
getDestinations() { return Collections.unmodifiableCollection(destinations); } public long getSequencerNumber() { return sequencerNumber; } public ToaHeader setSequencerNumber(long sequencerNumber) { this.sequencerNumber = sequencerNumber; return this; } public byte getType() { return type; } @Override public int size() { return (int) (Global.BYTE_SIZE + messageID.serializedSize() + Bits.size(sequencerNumber) + Util.size(destinations)); } @Override public void writeTo(DataOutput out) throws Exception { out.writeByte(type); messageID.writeTo(out); Bits.writeLong(sequencerNumber, out); if (type == DATA_MESSAGE) { Util.writeAddresses(destinations, out); } } @Override public void readFrom(DataInput in) throws Exception { type = in.readByte(); messageID = new MessageID(); messageID.readFrom(in); sequencerNumber = Bits.readLong(in); if (type == DATA_MESSAGE) { destinations = (Collection
) Util.readAddresses(in, ArrayList.class); } } @Override public String toString() { return "ToaHeader{" + "type=" + type2String(type) + ", message_id=" + messageID + ", sequence_number=" + sequencerNumber + ", destinations=" + destinations + '}'; } public static String type2String(byte type) { switch (type) { case DATA_MESSAGE: return "DATA_MESSAGE"; case PROPOSE_MESSAGE: return "PROPOSE_MESSAGE"; case FINAL_MESSAGE: return "FINAL_MESSAGE"; case SINGLE_DESTINATION_MESSAGE: return "SINGLE_DESTINATION_MESSAGE"; default: return "UNKNOWN"; } } public static ToaHeader newDataMessageHeader(MessageID messageID, Collection
destinations) { assertMessageIDNotNull(messageID); return new ToaHeader(messageID, DATA_MESSAGE).setDestinations(new ArrayList<>(destinations)); } public static ToaHeader newProposeMessageHeader(MessageID messageID, long sequencerNumber) { assertMessageIDNotNull(messageID); return new ToaHeader(messageID, PROPOSE_MESSAGE).setSequencerNumber(sequencerNumber); } public static ToaHeader newFinalMessageHeader(MessageID messageID, long sequenceNumber) { assertMessageIDNotNull(messageID); return new ToaHeader(messageID, FINAL_MESSAGE).setSequencerNumber(sequenceNumber); } public static ToaHeader createSingleDestinationHeader(MessageID messageID) { return new ToaHeader(messageID, SINGLE_DESTINATION_MESSAGE); } private static void assertMessageIDNotNull(MessageID messageID) { if (messageID == null) { throw new NullPointerException("The message ID can't be null."); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy