package io.vivarium.net.messages;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.vivarium.net.UUIDDeserializer;
import io.vivarium.net.UUIDSerializer;
import io.vivarium.net.VersionDeserializer;
import io.vivarium.net.VersionSerializer;
import io.vivarium.util.UUID;
import io.vivarium.util.Version;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@EqualsAndHashCode(callSuper = true)
@ToString
public class WorkerPledgeMessage extends Message
{
private final UUID workerID;
private final boolean active;
private final Version codeVersion;
private final int fileFormatVersion;
private final long[] throughputs;
public WorkerPledgeMessage(UUID workerID, long[] throughputs)
{
this(UUID.randomUUID(), workerID, true, Version.CURRENT_VERSION, Version.FILE_FORMAT_VERSION, throughputs);
}
@JsonCreator
public WorkerPledgeMessage(@JsonProperty("messageID") @JsonSerialize(using = UUIDSerializer.class) UUID messageID,
@JsonProperty("workerID") @JsonSerialize(using = UUIDSerializer.class) UUID workerID,
@JsonProperty("active") boolean active,
@JsonProperty("codeVersion") @JsonSerialize(using = VersionSerializer.class) Version codeVersion,
@JsonProperty("fileFormatVersion") int fileFormatVersion, @JsonProperty("throughputs") long[] throughputs)
{
super(messageID);
this.workerID = workerID;
this.active = active;
this.codeVersion = codeVersion;
this.fileFormatVersion = fileFormatVersion;
this.throughputs = throughputs;
}
@JsonDeserialize(using = UUIDDeserializer.class)
public UUID getWorkerID()
{
return workerID;
}
public boolean isActive()
{
return active;
}
@JsonDeserialize(using = VersionDeserializer.class)
public Version getCodeVersion()
{
return codeVersion;
}
public int getFileFormatVersion()
{
return fileFormatVersion;
}
public long[] getThroughputs()
{
return throughputs;
}
}