
co.spraybot.messagerunner.messagecodecs.ProcessorAvailabilityParcelMessageCodec Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of message-runner Show documentation
Show all versions of message-runner Show documentation
A micro-framework to allow easily passing specific Vert.x messages to specific addresses for processing of those messages.
The newest version!
package co.spraybot.messagerunner.messagecodecs;
import co.spraybot.messagerunner.Parcel;
import co.spraybot.messagerunner.ProcessorAvailabilityParcel;
import co.spraybot.messagerunner.builders.ProcessorAvailabilityParcelBuilder;
import co.spraybot.messagerunner.parcels.DefaultProcessorAvailabilityParcel;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.eventbus.MessageCodec;
import io.vertx.core.json.JsonObject;
import java.util.UUID;
public class ProcessorAvailabilityParcelMessageCodec implements MessageCodec {
@Override
public void encodeToWire(Buffer buffer, DefaultProcessorAvailabilityParcel processorAvailabilityParcel) {
JsonObject data = new JsonObject();
data.put("address", processorAvailabilityParcel.getAddress().toString());
data.put("parcelType", processorAvailabilityParcel.getParcelType().getCanonicalName());
data.put("isAvailable", processorAvailabilityParcel.isAvailable());
String encodedData = data.encode();
int length = encodedData.getBytes().length;
buffer.appendInt(length);
buffer.appendString(encodedData);
}
@Override
public ProcessorAvailabilityParcel decodeFromWire(int i, Buffer buffer) {
try {
int start = i + 4;
int end = buffer.getInt(i) + 4;
String encoded = buffer.getString(start, end);
JsonObject data = new JsonObject(encoded);
UUID address = UUID.fromString(data.getString("address"));
ProcessorAvailabilityParcelBuilder parcelBuilder = ProcessorAvailabilityParcel.builder()
.sendTo(address);
if (data.getBoolean("isAvailable")) {
parcelBuilder.isAvailable();
} else {
parcelBuilder.isUnavailable();
}
Class extends Parcel> parcelType = (Class extends Parcel>) Class.forName(data.getString("parcelType"));
parcelBuilder.ofParcelType(parcelType);
return parcelBuilder.build();
} catch (ClassNotFoundException classNotFound) {
throw new RuntimeException(classNotFound);
}
}
@Override
public ProcessorAvailabilityParcel transform(DefaultProcessorAvailabilityParcel processorAvailabilityParcel) {
return processorAvailabilityParcel;
}
@Override
public String name() {
return getClass().getCanonicalName();
}
@Override
public byte systemCodecID() {
return -1;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy