/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package se.sics.gvod.gradient.msgs;
import io.netty.buffer.ByteBuf;
import se.sics.gvod.common.msgs.MessageEncodingException;
import se.sics.gvod.common.msgs.RelayMsgNetty;
import se.sics.gvod.net.VodMsgFrameDecoder;
import se.sics.gvod.net.VodAddress;
import se.sics.gvod.net.msgs.RewriteableMsg;
import se.sics.gvod.net.msgs.ScheduleRetryTimeout;
import se.sics.gvod.net.util.UserTypesEncoderFactory;
import se.sics.gvod.timer.TimeoutId;
/**
*
* @author jdowling
*/
public class LeaderProposeMsg {
public static class Request extends RelayMsgNetty.Request {
private static final long serialVersionUID = 11555558888143L;
private final long utility;
public Request(VodAddress source, VodAddress destination,
int clientId, int remoteId, long utility) {
super(source, destination, clientId, remoteId);
this.utility = utility;
}
public long getUtility() {
return this.utility;
}
@Override
public int getSize() {
return super.getSize()
+ 8 /* utility*/
;
}
@Override
public ByteBuf toByteArray() throws MessageEncodingException {
ByteBuf buffer = createChannelBufferWithHeader();
buffer.writeLong(utility);
return buffer;
}
@Override
public byte getOpcode() {
return VodMsgFrameDecoder.LEADER_SELECTION_REQUEST;
}
@Override
public RewriteableMsg copy() {
LeaderProposeMsg.Request copy = new LeaderProposeMsg.Request(vodSrc,
vodDest, clientId, remoteId, utility);
copy.setTimeoutId(timeoutId);
return copy;
}
}
public static class Response extends RelayMsgNetty.Response {
private static final long serialVersionUID = -44996996410L;
private final boolean isLeader;
public Response(VodAddress source, VodAddress destination,
int clientId, int remoteId, VodAddress nextDest,
TimeoutId timeoutId, boolean isLeader, RelayMsgNetty.Status status) {
super(source, destination, clientId, remoteId, nextDest, timeoutId, status);
this.isLeader = isLeader;
}
public boolean isLeader(){
return this.isLeader;
}
@Override
public int getSize() {
return super.getSize()
+ 1 /* outgoing */
;
}
@Override
public ByteBuf toByteArray() throws MessageEncodingException {
ByteBuf buffer = createChannelBufferWithHeader();
UserTypesEncoderFactory.writeBoolean(buffer, isLeader);
return buffer;
}
@Override
public byte getOpcode() {
return VodMsgFrameDecoder.LEADER_SELECTION_RESPONSE;
}
@Override
public RewriteableMsg copy() {
return new LeaderProposeMsg.Response(vodSrc, vodDest, clientId,
remoteId, nextDest, timeoutId, isLeader, getStatus());
}
}
// TODO: Is this necessary?
public static final class RequestTimeout extends RelayMsgNetty.RequestTimeout {
private final Request requestMsg;
public RequestTimeout(ScheduleRetryTimeout st, Request requestMsg) {
super(st, requestMsg);
this.requestMsg = requestMsg;
}
public Request getRequest() {
return requestMsg;
}
}
}