mirror of
https://github.com/array-in-a-matrix/brainwine.git
synced 2025-04-02 11:11:58 -04:00
Create custom deserializer for BlocksIgnoreRequest
This commit is contained in:
parent
781096ee2c
commit
03b7264c04
2 changed files with 62 additions and 0 deletions
|
@ -0,0 +1,57 @@
|
|||
package brainwine.gameserver.serialization;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.JsonToken;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
|
||||
|
||||
import brainwine.gameserver.server.requests.BlocksIgnoreRequest;
|
||||
|
||||
public class BlocksIgnoreRequestDeserializer extends StdDeserializer<BlocksIgnoreRequest> {
|
||||
|
||||
public static final BlocksIgnoreRequestDeserializer INSTANCE = new BlocksIgnoreRequestDeserializer();
|
||||
private static final long serialVersionUID = -3423549008026709552L;
|
||||
|
||||
protected BlocksIgnoreRequestDeserializer() {
|
||||
super(BlocksIgnoreRequest.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlocksIgnoreRequest deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
|
||||
BlocksIgnoreRequest request = new BlocksIgnoreRequest();
|
||||
|
||||
if(parser.currentToken() != JsonToken.START_ARRAY) {
|
||||
throw new IOException("Got invalid token, expected START_ARRAY");
|
||||
}
|
||||
|
||||
if(parser.nextToken() == JsonToken.VALUE_NUMBER_INT) {
|
||||
List<Integer> chunkIndices = new ArrayList<>();
|
||||
|
||||
while(parser.currentToken() != JsonToken.END_ARRAY) {
|
||||
chunkIndices.add(parser.getIntValue());
|
||||
parser.nextToken();
|
||||
}
|
||||
|
||||
request.chunkIndices = toArray(chunkIndices);
|
||||
} else {
|
||||
request.chunkIndices = parser.readValueAs(int[].class);
|
||||
}
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
private int[] toArray(List<Integer> list) {
|
||||
int[] array = new int[list.size()];
|
||||
|
||||
for(int i = 0; i < array.length; i++) {
|
||||
array[i] = list.get(i);
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.JsonDeserializer;
|
|||
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
|
||||
|
||||
import brainwine.gameserver.server.Request;
|
||||
import brainwine.gameserver.server.requests.BlocksIgnoreRequest;
|
||||
|
||||
public class RequestDeserializerModifier extends BeanDeserializerModifier {
|
||||
|
||||
|
@ -18,6 +19,10 @@ public class RequestDeserializerModifier extends BeanDeserializerModifier {
|
|||
public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
|
||||
Class<?> clazz = beanDesc.getBeanClass();
|
||||
|
||||
if(BlocksIgnoreRequest.class.isAssignableFrom(clazz)) {
|
||||
return BlocksIgnoreRequestDeserializer.INSTANCE;
|
||||
}
|
||||
|
||||
if(Request.class.isAssignableFrom(clazz)) {
|
||||
return new RequestDeserializer((Class<? extends Request>)clazz);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue