Server/Server/src/main/java/uulm/teamname/marvelous/server/lobby/pipelining/PlayerFilterSegment.java

52 lines
1.9 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.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 {} of enemy player 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);
}
}
}