feat: implemented proper Request serialization
This commit is contained in:
@ -0,0 +1,83 @@
|
||||
package uulm.teamname.marvelous.gamelibrary.json.ingame;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
|
||||
import uulm.teamname.marvelous.gamelibrary.entities.EntityID;
|
||||
import uulm.teamname.marvelous.gamelibrary.entities.EntityType;
|
||||
import uulm.teamname.marvelous.gamelibrary.requests.CharacterRequest;
|
||||
import uulm.teamname.marvelous.gamelibrary.requests.GameRequest;
|
||||
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
||||
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class RequestSerializer extends StdSerializer<Request> {
|
||||
|
||||
public RequestSerializer() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
protected RequestSerializer(Class<Request> t) {
|
||||
super(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(Request value, JsonGenerator gen, SerializerProvider provider) throws IOException {
|
||||
|
||||
gen.writeStartObject();
|
||||
gen.writeObjectField("requestType", value.type);
|
||||
|
||||
|
||||
if (value instanceof GameRequest) {
|
||||
serializeGameRequest((GameRequest) value, gen, provider);
|
||||
} else if (value instanceof CharacterRequest) {
|
||||
serializeCharacterRequest((CharacterRequest) value, gen, provider);
|
||||
}
|
||||
|
||||
gen.writeEndObject();
|
||||
}
|
||||
|
||||
/** Method invoked after writing the RequestType, and used to write any additional values required */
|
||||
private void serializeGameRequest(GameRequest value, JsonGenerator gen, SerializerProvider provider)
|
||||
throws IOException {
|
||||
return; // does nothing, but still there for consistency
|
||||
}
|
||||
|
||||
/** Method invoked after writing the RequestType, and used to write any additional values required */
|
||||
private void serializeCharacterRequest(CharacterRequest value, JsonGenerator gen, SerializerProvider provider)
|
||||
throws IOException {
|
||||
// The idea here is: if ([GUARD]) {gen.write...} for all fields.
|
||||
|
||||
boolean hasTargetEntity =
|
||||
value.type == RequestType.MeleeAttackRequest ||
|
||||
value.type == RequestType.RangedAttackRequest ||
|
||||
value.type == RequestType.ExchangeInfinityStoneRequest;
|
||||
|
||||
boolean hasStoneType =
|
||||
value.type == RequestType.ExchangeInfinityStoneRequest ||
|
||||
value.type == RequestType.UseInfinityStoneRequest;
|
||||
|
||||
boolean hasValue =
|
||||
value.type == RequestType.MeleeAttackRequest ||
|
||||
value.type == RequestType.RangedAttackRequest;
|
||||
|
||||
|
||||
gen.writeObjectField("originEntity", value.originEntity);
|
||||
|
||||
if (hasTargetEntity) {
|
||||
gen.writeObjectField("targetEntity", value.targetEntity);
|
||||
}
|
||||
|
||||
gen.writeObjectField("originField", value.originField);
|
||||
gen.writeObjectField("targetField", value.targetField);
|
||||
|
||||
if (hasStoneType) {
|
||||
gen.writeObjectField("stoneType", new EntityID(EntityType.InfinityStones, value.stoneType.getID()));
|
||||
}
|
||||
|
||||
if (hasValue) {
|
||||
gen.writeObjectField("value", value.value);
|
||||
}
|
||||
}
|
||||
}
|
@ -7,11 +7,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import uulm.teamname.marvelous.gamelibrary.json.basic.EventMessage;
|
||||
import uulm.teamname.marvelous.gamelibrary.json.ingame.RequestDeserializer;
|
||||
import uulm.teamname.marvelous.gamelibrary.json.ingame.RequestSerializer;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/** Represents an abstract request sent inside a {@link EventMessage} between client and server. */
|
||||
@JsonDeserialize(using = RequestDeserializer.class)
|
||||
@JsonSerialize(using = RequestSerializer.class)
|
||||
public abstract class Request {
|
||||
|
||||
@JsonProperty("requestType") public RequestType type;
|
||||
|
Reference in New Issue
Block a user