Server/Server/src/main/java/uulm/teamname/marvelous/server/game/pipelining/GameLogicSegment.java

39 lines
1.3 KiB
Java

package uulm.teamname.marvelous.server.game.pipelining;
import org.tinylog.Logger;
import uulm.teamname.marvelous.gamelibrary.events.Event;
import uulm.teamname.marvelous.gamelibrary.gamelogic.GameInstance;
import uulm.teamname.marvelous.gamelibrary.requests.Request;
import uulm.teamname.marvelous.server.game.GameSession;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* The {@link GameLogicSegment} handles all {@link GameInstance game} relevant {@link Request Requests}.
*/
public class GameLogicSegment implements Segment {
private final GameSession parent;
public GameLogicSegment(GameSession parent) {
this.parent = parent;
}
@Override
public void processRequests(Packet packet, List<Event> carrier, AtomicBoolean abort) {
Logger.trace("GameStateSegment received {} requests.", packet.size());
var result = parent.getInstance().checkRequestsAndApply(packet);
Logger.trace("GameLogic generated {} events", result.map(List::size).orElse(0));
if(result.isPresent()) {
Logger.trace("Result from GameLogic is present. Adding requests to carrier.");
carrier.addAll(result.get());
packet.clear();
}else {
Logger.debug("Result from GameLogic is invalid. Triggering error.");
abort.set(true);
}
}
}