Serialize byte arrays sent through rpc as unsigned numbers.
This commit is contained in:
@@ -11,6 +11,7 @@ import li.cil.oc2.api.bus.device.rpc.RPCParameter;
|
||||
import li.cil.oc2.common.Constants;
|
||||
import li.cil.oc2.common.bus.device.rpc.RPCDeviceList;
|
||||
import li.cil.oc2.common.bus.device.rpc.RPCMethodParameterTypeAdapters;
|
||||
import li.cil.oc2.common.serialization.serializers.UnsignedByteArrayJsonSerializer;
|
||||
import li.cil.oc2.common.serialization.serializers.MessageJsonDeserializer;
|
||||
import li.cil.oc2.common.serialization.serializers.MethodInvocationJsonDeserializer;
|
||||
import li.cil.oc2.common.serialization.serializers.RPCDeviceWithIdentifierJsonSerializer;
|
||||
@@ -62,6 +63,7 @@ public final class RPCDeviceBusAdapter implements Steppable {
|
||||
this.serialDevice = serialDevice;
|
||||
this.transmitBuffer = ByteBuffer.allocate(maxMessageSize);
|
||||
this.gson = RPCMethodParameterTypeAdapters.beginBuildGson()
|
||||
.registerTypeAdapter(byte[].class, new UnsignedByteArrayJsonSerializer())
|
||||
.registerTypeAdapter(MethodInvocation.class, new MethodInvocationJsonDeserializer())
|
||||
.registerTypeAdapter(Message.class, new MessageJsonDeserializer())
|
||||
.registerTypeAdapter(RPCDeviceWithIdentifier.class, new RPCDeviceWithIdentifierJsonSerializer())
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package li.cil.oc2.common.serialization.serializers;
|
||||
|
||||
import com.google.gson.*;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public final class UnsignedByteArrayJsonSerializer implements JsonSerializer<byte[]> {
|
||||
@Override
|
||||
public JsonElement serialize(final byte[] src, final Type typeOfSrc, final JsonSerializationContext context) {
|
||||
if (src == null) {
|
||||
return JsonNull.INSTANCE;
|
||||
}
|
||||
|
||||
final JsonArray json = new JsonArray();
|
||||
for (final byte b : src) {
|
||||
json.add(b & 0xFF);
|
||||
}
|
||||
return json;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user