package org.corfudb.protocols.wireprotocol; import io.netty.buffer.ByteBuf; import lombok.Getter; import lombok.NoArgsConstructor; import java.lang.reflect.ParameterizedType; /** * A message type which represents an encapsulated Corfu * payload. * * T should be either of a primitive boxed type (Long, Integer, etc) * or of ICorfuPayload. * * NEVER, EVER use this class as a raw type. This class DEPENDS on * the generic captured at runtime by CorfuMsg (via TypeToken). * * Created by mwei on 8/1/16. */ @NoArgsConstructor public class CorfuPayloadMsg<T> extends CorfuMsg { /** * The payload. */ @Getter private T payload; public CorfuPayloadMsg(CorfuMsgType msgType, T payload) { super(msgType); this.payload = payload; } /** * Serialize the message into the given bytebuffer. * * @param buffer The buffer to serialize to. */ @Override public void serialize(ByteBuf buffer) { super.serialize(buffer); ICorfuPayload.serialize(buffer, payload); } /** * Parse the rest of the message from the buffer. Classes that extend CorfuMsg * should parse their fields in this method. * * @param buffer */ @Override @SuppressWarnings("unchecked") public void fromBuffer(ByteBuf buffer) { payload = (T) ICorfuPayload.fromBuffer(buffer, (Class)((ParameterizedType)msgType.messageType.getType()) .getActualTypeArguments()[0]); } }