53 lines
2.0 KiB
Java
53 lines
2.0 KiB
Java
package uulm.teamname.marvelous.server.lobby.pipelining;
|
|
|
|
import org.tinylog.Logger;
|
|
import uulm.teamname.marvelous.gamelibrary.entities.EntityType;
|
|
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
|
import uulm.teamname.marvelous.gamelibrary.messages.ParticipantType;
|
|
import uulm.teamname.marvelous.gamelibrary.requests.CharacterRequest;
|
|
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
|
import uulm.teamname.marvelous.server.lobbymanager.Participant;
|
|
|
|
import java.util.List;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
public class PlayerFilterSegment implements Segment {
|
|
@Override
|
|
public void processRequests(Packet packet, List<Event> carrier, AtomicBoolean abort) {
|
|
Logger.trace("PlayerFilterSegment received {} requests", packet.size());
|
|
for (Request request: packet) {
|
|
boolean valid = switch (request.type) {
|
|
case MeleeAttackRequest,
|
|
RangedAttackRequest,
|
|
MoveRequest,
|
|
ExchangeInfinityStoneRequest,
|
|
UseInfinityStoneRequest -> isValid((CharacterRequest) request, packet.getOrigin());
|
|
default -> true;
|
|
};
|
|
if (!valid) {
|
|
Logger.debug("Invalid request of type {} found, setting abort flag", request.type);
|
|
abort.set(true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private boolean isValid(CharacterRequest request, Participant participant) {
|
|
EntityType type = switch(participant.type) {
|
|
case PlayerOne -> EntityType.P1;
|
|
case PlayerTwo -> EntityType.P2;
|
|
case Spectator -> null;
|
|
};
|
|
|
|
if (type == null) {
|
|
Logger.warn("Some spectator-sent movement requests arrived in the PlayerFilterSegment.\n" +
|
|
"Have you ordered your segments properly?");
|
|
return false;
|
|
} else {
|
|
return request.originEntity.type.equals(type);
|
|
}
|
|
|
|
|
|
}
|
|
}
|