/* * 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 LeaderHeartbeatMsg { public static class Request extends RelayMsgNetty.Request { private static final long serialVersionUID = 1456977888143L; private final boolean outgoing; public Request(VodAddress source, VodAddress destination, int clientId, int remoteId, boolean outgoing) { super(source, destination, clientId, remoteId); this.outgoing = outgoing; } public boolean isOutgoing() { return outgoing; } @Override public int getSize() { return super.getSize() + 1 /* outgoing */ ; } @Override public ByteBuf toByteArray() throws MessageEncodingException { ByteBuf buffer = createChannelBufferWithHeader(); UserTypesEncoderFactory.writeBoolean(buffer, outgoing); return buffer; } @Override public byte getOpcode() { return VodMsgFrameDecoder.GRADIENT_HEARTBEAT_REQUEST; } @Override public RewriteableMsg copy() { LeaderHeartbeatMsg.Request copy = new LeaderHeartbeatMsg.Request(vodSrc, vodDest, clientId, remoteId, outgoing); copy.setTimeoutId(timeoutId); return copy; } } public static class Response extends RelayMsgNetty.Response { private static final long serialVersionUID = -44444444410L; private final boolean hasConnection; private final long utility; public Response(VodAddress source, VodAddress destination, int clientId, int remoteId, VodAddress nextDest, TimeoutId timeoutId, boolean hasConnection, long utility, RelayMsgNetty.Status status) { super(source, destination, clientId, remoteId, nextDest, timeoutId, status); this.hasConnection = hasConnection; this.utility = utility; } public long getUtility() { return utility; } public boolean isHasConnection() { return hasConnection; } @Override public int getSize() { return super.getSize() + 1 // hasConnection + 8 // utility ; } @Override public ByteBuf toByteArray() throws MessageEncodingException { ByteBuf buffer = createChannelBufferWithHeader(); UserTypesEncoderFactory.writeBoolean(buffer, hasConnection); buffer.writeLong(utility); return buffer; } @Override public byte getOpcode() { return VodMsgFrameDecoder.GRADIENT_HEARTBEAT_RESPONSE; } @Override public RewriteableMsg copy() { return new LeaderHeartbeatMsg.Response(vodSrc, vodDest, clientId, remoteId, nextDest, timeoutId, hasConnection, utility, getStatus()); } } 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; } } }