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

io.scalecube.cluster.gossip.Gossip Maven / Gradle / Ivy

The newest version!
package io.scalecube.cluster.gossip;

import io.scalecube.cluster.transport.api.Message;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Objects;
import java.util.StringJoiner;

/** Data model for gossip, include gossip id, qualifier and object need to disseminate. */
final class Gossip implements Externalizable {

  private static final long serialVersionUID = 1L;

  private String gossiperId;
  private Message message;
  // incremented counter
  private long sequenceId;

  public Gossip() {}

  public Gossip(String gossiperId, Message message, long sequenceId) {
    this.gossiperId = Objects.requireNonNull(gossiperId);
    this.message = Objects.requireNonNull(message);
    this.sequenceId = sequenceId;
  }

  public String gossipId() {
    return gossiperId + "-" + sequenceId;
  }

  public String gossiperId() {
    return gossiperId;
  }

  public Message message() {
    return message;
  }

  public long sequenceId() {
    return sequenceId;
  }

  @Override
  public boolean equals(Object that) {
    if (this == that) {
      return true;
    }
    if (that == null || getClass() != that.getClass()) {
      return false;
    }
    Gossip gossip = (Gossip) that;
    return sequenceId == gossip.sequenceId
        && Objects.equals(gossiperId, gossip.gossiperId)
        && Objects.equals(message, gossip.message);
  }

  @Override
  public int hashCode() {
    return Objects.hash(gossiperId, message, sequenceId);
  }

  @Override
  public void writeExternal(ObjectOutput out) throws IOException {
    // gossiperId
    out.writeUTF(gossiperId);
    // message
    out.writeObject(message);
    // sequenceId
    out.writeLong(sequenceId);
  }

  @Override
  public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
    // gossiperId
    gossiperId = in.readUTF();
    // message
    message = (Message) in.readObject();
    // sequenceId
    sequenceId = in.readLong();
  }

  @Override
  public String toString() {
    return new StringJoiner(", ", Gossip.class.getSimpleName() + "[", "]")
        .add("gossiperId='" + gossiperId + "'")
        .add("message=" + message)
        .add("sequenceId=" + sequenceId)
        .toString();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy