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

net.cassite.xboxrelay.base.Message Maven / Gradle / Ivy

The newest version!
package net.cassite.xboxrelay.base;

import io.vertx.core.buffer.Buffer;
import vjson.JSONObject;
import vjson.deserializer.rule.ObjectRule;
import vjson.deserializer.rule.Rule;
import vjson.deserializer.rule.TypeRule;

import java.nio.charset.StandardCharsets;

public abstract class Message implements JSONObject {
    private static Rule rule;

    public static Rule messageTypeRule() {
        if (rule != null) {
            return rule;
        }
        synchronized (Message.class) {
            if (rule != null) {
                return rule;
            }
            rule = new TypeRule()
                .type("configure", (ObjectRule) ConfigureMessage.rule)
                .type("hb", (ObjectRule) HeartBeatMessage.rule)
                .type("event", (ObjectRule) XBoxEvent.rule);
        }
        return rule;
    }

    public Buffer toBuffer() {
        var json = toJson().stringify().getBytes(StandardCharsets.UTF_8);
        int len = json.length;
        var lenBuffer = Buffer.buffer(3);
        byte a = (byte) ((len >> 16) & 0xff);
        byte b = (byte) ((len >> 8) & 0xff);
        byte c = (byte) (len & 0xff);
        lenBuffer.setByte(0, a);
        lenBuffer.setByte(1, b);
        lenBuffer.setByte(2, c);
        return lenBuffer.appendBuffer(Buffer.buffer(json));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy