package org.infinispan.server.hotrod;
import org.infinispan.commons.util.Util;
import org.infinispan.server.hotrod.transport.ExtendedByteBuf;
import io.netty.buffer.ByteBuf;
/**
* @author Galder ZamarreƱo
*/
class Events {
abstract static class Event {
protected final byte version;
protected final long messageId;
protected final HotRodOperation op;
protected final byte[] listenerId;
protected final boolean isRetried;
protected final byte marker;
protected Event(byte version, long messageId, HotRodOperation op, byte[] listenerId, boolean isRetried, byte marker) {
this.version = version;
this.messageId = messageId;
this.op = op;
this.listenerId = listenerId;
this.isRetried = isRetried;
this.marker = marker;
}
abstract void writeEvent(ByteBuf buf);
void defaultEvent(ByteBuf buf) {
buf.writeByte(marker); // custom marker
buf.writeByte(isRetried ? 1 : 0);
}
}
static class KeyEvent extends Event {
protected final byte[] key;
protected KeyEvent(byte version, long messageId, HotRodOperation op, byte[] listenerId, boolean isRetried,
byte[] key) {
super(version, messageId, op, listenerId, isRetried, (byte) 0);
this.key = key;
}
@Override
public String toString() {
return "KeyEvent{" +
"version=" + version +
", messageId=" + messageId +
", op=" + op +
", listenerId=" + Util.printArray(listenerId, false) +
", isRetried=" + isRetried +
", key=" + Util.toStr(key) +
'}';
}
@Override
void writeEvent(ByteBuf buf) {
defaultEvent(buf);
ExtendedByteBuf.writeRangedBytes(key, buf);
}
}
static class KeyWithVersionEvent extends Event {
protected final byte[] key;
protected final long dataVersion;
protected KeyWithVersionEvent(byte version, long messageId, HotRodOperation op, byte[] listenerId, boolean isRetried,
byte[] key, long dataVersion) {
super(version, messageId, op, listenerId, isRetried, (byte) 0);
this.key = key;
this.dataVersion = dataVersion;
}
@Override
public String toString() {
return "KeyWithVersionEvent{" +
"version=" + version +
", messageId=" + messageId +
", op=" + op +
", listenerId=" + Util.printArray(listenerId, false) +
", isRetried=" + isRetried +
", key=" + Util.toStr(key) +
", dataVersion=" + dataVersion +
'}';
}
@Override
void writeEvent(ByteBuf buf) {
defaultEvent(buf);
ExtendedByteBuf.writeRangedBytes(key, buf);
buf.writeLong(dataVersion);
}
}
static class CustomEvent extends Event {
protected final byte[] eventData;
protected CustomEvent(byte version, long messageId, HotRodOperation op, byte[] listenerId, boolean isRetried,
byte[] eventData) {
super(version, messageId, op, listenerId, isRetried, (byte) 1);
this.eventData = eventData;
}
@Override
public String toString() {
return "CustomEvent{" +
"version=" + version +
", messageId=" + messageId +
", op=" + op +
", listenerId=" + Util.printArray(listenerId, false) +
", isRetried=" + isRetried +
", event=" + Util.toStr(eventData) +
'}';
}
@Override
void writeEvent(ByteBuf buf) {
defaultEvent(buf);
ExtendedByteBuf.writeRangedBytes(eventData, buf);
}
}
static class CustomRawEvent extends Event {
protected final byte[] eventData;
protected CustomRawEvent(byte version, long messageId, HotRodOperation op, byte[] listenerId, boolean isRetried,
byte[] eventData) {
super(version, messageId, op, listenerId, isRetried, (byte) 2);
this.eventData = eventData;
}
@Override
public String toString() {
return "CustomRawEvent{" +
"version=" + version +
", messageId=" + messageId +
", op=" + op +
", listenerId=" + Util.printArray(listenerId, false) +
", isRetried=" + isRetried +
", event=" + Util.toStr(eventData) +
'}';
}
@Override
void writeEvent(ByteBuf buf) {
defaultEvent(buf);
ExtendedByteBuf.writeRangedBytes(eventData, buf);
}
}
}