/* * 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 java.util.List; import se.sics.gvod.common.VodDescriptor; import se.sics.gvod.common.msgs.MessageEncodingException; import se.sics.gvod.common.msgs.RelayMsgNetty; import se.sics.gvod.common.msgs.RelayMsgNetty.Status; 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.RewriteableRetryTimeout; import se.sics.gvod.net.msgs.ScheduleRetryTimeout; import se.sics.gvod.net.util.UserTypesEncoderFactory; import se.sics.gvod.timer.TimeoutId; /** * * @author jim */ public class GradientSetsExchangeMsg { public static class Request extends RelayMsgNetty.Request { public Request(VodAddress source, VodAddress destination, int clientId, int remoteId) { super(source, destination, clientId, remoteId); } public Request(VodAddress source, VodAddress destination, int clientId, int remoteId, TimeoutId timeoutId) { super(source, destination, clientId, remoteId, timeoutId); } private Request(VodAddress source, VodAddress destination, int clientId, int remoteId, VodAddress nextDest, TimeoutId timeoutId) { super(source, destination, clientId, remoteId, nextDest, timeoutId); } @Override public byte getOpcode() { return VodMsgFrameDecoder.SETS_EXCHANGE_REQUEST; } @Override public RewriteableMsg copy() { return new GradientSetsExchangeMsg.Request(vodSrc, vodDest, clientId, remoteId, nextDest, timeoutId); } } public static class Response extends RelayMsgNetty.Response { private final List<VodDescriptor> similarPeers; public Response(VodAddress source, Request request, List<VodDescriptor> similarPeers) { super(source, request, Status.OK); this.similarPeers = similarPeers; } public Response(VodAddress source, VodAddress destination, VodAddress nextDest, TimeoutId timeoutId, List<VodDescriptor> similarPeers) { this(source, destination, nextDest.getId(), source.getId(), nextDest, timeoutId, similarPeers); } private Response(VodAddress source, VodAddress destination, int clientId, int remoteId, VodAddress nextDest, TimeoutId timeoutId, List<VodDescriptor> similarPeers) { super(source, destination, clientId, remoteId, nextDest, timeoutId, Status.OK); this.similarPeers = similarPeers; } @Override public int getSize() { return super.getSize() + UserTypesEncoderFactory.getListVodNodeDescriptorSize(similarPeers); } @Override public ByteBuf toByteArray() throws MessageEncodingException { ByteBuf buffer = createChannelBufferWithHeader(); UserTypesEncoderFactory.writeListVodNodeDescriptors(buffer, similarPeers); return buffer; } @Override public byte getOpcode() { return VodMsgFrameDecoder.SETS_EXCHANGE_RESPONSE; } /** * @return the similarPeers */ public List<VodDescriptor> getSimilarPeers() { return similarPeers; } @Override public RewriteableMsg copy() { return new GradientSetsExchangeMsg.Response(vodSrc, vodDest, clientId, remoteId, nextDest, timeoutId, similarPeers); } } public static class RequestRetryTimeout extends RewriteableRetryTimeout { private final Request requestMsg; public RequestRetryTimeout(ScheduleRetryTimeout st, Request requestMsg) { super(st, requestMsg, requestMsg.getVodSource().getOverlayId()); this.requestMsg = requestMsg; } public Request getRequestMsg() { return requestMsg; } } }