39 lines
1.3 KiB
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);
|
|
}
|
|
}
|
|
}
|