All Downloads are FREE. Search and download functionalities are using the official Maven repository.

co.spraybot.messagerunner.messagecodecs.ProcessorAvailabilityParcelMessageCodec Maven / Gradle / Ivy

Go to download

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 parcelType = (Class) 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