feat: completed several segments
This commit is contained in:
parent
1887a2c12d
commit
2a4fc1cef0
2
Gamelib
2
Gamelib
@ -1 +1 @@
|
|||||||
Subproject commit 4802b0113d64d333d892185dc72f0b8589481bd0
|
Subproject commit 0572450ced119f18a11363e02356d9afe1d880a7
|
@ -1,32 +1,36 @@
|
|||||||
package uulm.teamname.marvelous.server.lobby.pipelining;
|
package uulm.teamname.marvelous.server.lobby.pipelining;
|
||||||
|
|
||||||
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
||||||
import uulm.teamname.marvelous.gamelibrary.events.EventBuilder;
|
import uulm.teamname.marvelous.gamelibrary.gamelogic.ParticipantType;
|
||||||
import uulm.teamname.marvelous.gamelibrary.events.EventType;
|
|
||||||
import uulm.teamname.marvelous.gamelibrary.requests.RequestBuilder;
|
|
||||||
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
||||||
import uulm.teamname.marvelous.server.lobby.Lobby;
|
import uulm.teamname.marvelous.server.lobby.Lobby;
|
||||||
import uulm.teamname.marvelous.server.lobbymanager.Participant;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class DisconnectSegment implements Segment {
|
public class DisconnectSegment implements Segment {
|
||||||
|
|
||||||
private final Lobby parent;
|
private final Lobby parent;
|
||||||
private final Participant player;
|
|
||||||
public DisconnectSegment(Lobby parent, Participant player){
|
public DisconnectSegment(Lobby parent) {
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.player = player;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processRequests(Packet packet, List<Event> carrier, AtomicBoolean abort) {
|
public void processRequests(Packet packet, List<Event> carrier, AtomicBoolean abort) {
|
||||||
if (packet.contains(new RequestBuilder(RequestType.DisconnectRequest).buildGameRequest())) {
|
if (packet.containsRequestOfType(RequestType.DisconnectRequest)) {
|
||||||
carrier.add(new EventBuilder(EventType.DisconnectEvent).buildGameEvent());
|
parent.connection.removePlayer(packet.getOrigin());
|
||||||
parent.connection.removePlayer(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (packet.getOrigin().type != ParticipantType.Spectator) {
|
||||||
|
if(parent.connection.hasPlayer1()){
|
||||||
|
parent.generateWin(parent.connection.getPlayer1());
|
||||||
|
}
|
||||||
|
else if(parent.connection.hasPlayer2()) {
|
||||||
|
parent.generateWin(parent.connection.getPlayer2());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
packet.clear();
|
packet.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,42 +1,30 @@
|
|||||||
package uulm.teamname.marvelous.server.lobby.pipelining;
|
package uulm.teamname.marvelous.server.lobby.pipelining;
|
||||||
|
|
||||||
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.events.EventBuilder;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.gamelogic.GameInstance;
|
||||||
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
||||||
import uulm.teamname.marvelous.server.lobby.Lobby;
|
import uulm.teamname.marvelous.server.lobby.Lobby;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class GameStateSegment implements Segment {
|
public class GameStateSegment implements Segment {
|
||||||
private Lobby parent;
|
private GameInstance game;
|
||||||
|
|
||||||
public GameStateSegment(Lobby parent){
|
public GameStateSegment(GameInstance game){
|
||||||
this.parent = parent;
|
this.game = game;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processRequests(Packet packet, List<Event> carrier, AtomicBoolean abort) {
|
public void processRequests(Packet packet, List<Event> carrier, AtomicBoolean abort) {
|
||||||
|
var result = game.checkRequestsAndApply(packet.toArray(new Request[0]));
|
||||||
parent.game.checkRequestsAndApply(packet.toArray(new Request[0]));
|
if (result.isPresent()) {
|
||||||
|
carrier.addAll(result.get());
|
||||||
// if (packet.contains(new RequestBuilder(RequestType.MeleeAttackRequest).buildGameRequest())) {
|
packet.clear();
|
||||||
// carrier.add(new EventBuilder(EventType.MeleeAttackEvent).buildGameEvent());
|
} else {
|
||||||
// }
|
abort.set(true);
|
||||||
// if (packet.contains(new RequestBuilder(RequestType.RangedAttackRequest).buildGameRequest())) {
|
}
|
||||||
// carrier.add(new EventBuilder(EventType.RangedAttackEvent).buildGameEvent());
|
|
||||||
// }
|
|
||||||
// if (packet.contains(new RequestBuilder(RequestType.MoveRequest).buildGameRequest())) {
|
|
||||||
// carrier.add(new EventBuilder(EventType.MoveEvent).buildGameEvent());
|
|
||||||
// }
|
|
||||||
// if (packet.contains(new RequestBuilder(RequestType.ExchangeInfinityStoneRequest).buildGameRequest())) {
|
|
||||||
// carrier.add(new EventBuilder(EventType.ExchangeInfinityStoneEvent).buildGameEvent());
|
|
||||||
// }
|
|
||||||
// if (packet.contains(new RequestBuilder(RequestType.UseInfinityStoneRequest).buildGameRequest())) {
|
|
||||||
// carrier.add(new EventBuilder(EventType.UseInfinityStoneEvent).buildGameEvent());
|
|
||||||
// }
|
|
||||||
// if (packet.contains(new RequestBuilder(RequestType.EndRoundRequest).buildGameRequest())) {
|
|
||||||
// //TODO what to do after EndRoundRequest
|
|
||||||
// //carrier.add(new EventBuilder(EventType.EndRoundEvent).buildGameEvent());
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package uulm.teamname.marvelous.server.lobby.pipelining;
|
|||||||
|
|
||||||
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
||||||
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
||||||
|
import uulm.teamname.marvelous.server.lobbymanager.Participant;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -10,7 +11,10 @@ import java.util.List;
|
|||||||
|
|
||||||
public class Packet extends ArrayList<Request> {
|
public class Packet extends ArrayList<Request> {
|
||||||
|
|
||||||
public Packet (Request[] requests) {
|
private final Participant origin;
|
||||||
|
|
||||||
|
public Packet (Request[] requests, Participant origin) {
|
||||||
|
this.origin = origin;
|
||||||
addAll(Arrays.asList(requests));
|
addAll(Arrays.asList(requests));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,4 +27,18 @@ public class Packet extends ArrayList<Request> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeRequestsOfTypes(RequestType... types) {
|
||||||
|
var listOfTypes = Arrays.asList(types);
|
||||||
|
this.removeIf(request -> listOfTypes.contains(request.type));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeRequestsNotOfTypes(RequestType... types) {
|
||||||
|
var listOfTypes = Arrays.asList(types);
|
||||||
|
this.removeIf(request -> !listOfTypes.contains(request.type));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Participant getOrigin() {
|
||||||
|
return origin;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ public class PauseSegment implements Segment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter the events
|
/* filter the events
|
||||||
if (paused) {
|
if (paused) {
|
||||||
for (Request request: packet) {
|
for (Request request: packet) {
|
||||||
switch (request.type) {
|
switch (request.type) {
|
||||||
@ -90,9 +90,19 @@ public class PauseSegment implements Segment {
|
|||||||
PauseStopRequest,
|
PauseStopRequest,
|
||||||
PauseStartRequest -> packet.remove(request);
|
PauseStartRequest -> packet.remove(request);
|
||||||
|
|
||||||
case DisconnectRequest, Req -> { /* do nothing */ }
|
case DisconnectRequest, Req -> { /* do nothing }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} */
|
||||||
|
|
||||||
|
packet.removeRequestsOfTypes(
|
||||||
|
RequestType.MeleeAttackRequest,
|
||||||
|
RequestType.RangedAttackRequest,
|
||||||
|
RequestType.MoveRequest,
|
||||||
|
RequestType.ExchangeInfinityStoneRequest,
|
||||||
|
RequestType.UseInfinityStoneRequest,
|
||||||
|
RequestType.EndRoundRequest,
|
||||||
|
RequestType.PauseStopRequest,
|
||||||
|
RequestType.PauseStartRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package uulm.teamname.marvelous.server.lobby.pipelining;
|
|||||||
|
|
||||||
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
||||||
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
||||||
|
import uulm.teamname.marvelous.server.lobbymanager.Participant;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
@ -35,9 +36,9 @@ public class Pipeline {
|
|||||||
* out of the {@link Optional}, first check whether the {@link Optional} is empty by doing
|
* out of the {@link Optional}, first check whether the {@link Optional} is empty by doing
|
||||||
* {@link Optional#isEmpty()} or {@link Optional#isPresent()}, and act accordingly.
|
* {@link Optional#isEmpty()} or {@link Optional#isPresent()}, and act accordingly.
|
||||||
*/
|
*/
|
||||||
public Optional<Event[]> processRequests(Request[] requests) {
|
public Optional<Event[]> processRequests(Request[] requests, Participant origin) {
|
||||||
// The packet carries the requests, and gets smaller per segment
|
// The packet carries the requests, and gets smaller per segment
|
||||||
Packet packet = new Packet(requests);
|
Packet packet = new Packet(requests, origin);
|
||||||
// The packet is filled by the requests resulting from events per segment
|
// The packet is filled by the requests resulting from events per segment
|
||||||
List<Event> carrier = new ArrayList<>();
|
List<Event> carrier = new ArrayList<>();
|
||||||
// The abort boolean describes whether an abort happened in a segment
|
// The abort boolean describes whether an abort happened in a segment
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package uulm.teamname.marvelous.server.lobby.pipelining;
|
package uulm.teamname.marvelous.server.lobby.pipelining;
|
||||||
|
|
||||||
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.gamelogic.GameInstance;
|
||||||
import uulm.teamname.marvelous.gamelibrary.requests.RequestBuilder;
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestBuilder;
|
||||||
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
||||||
import uulm.teamname.marvelous.server.lobby.Lobby;
|
import uulm.teamname.marvelous.server.lobby.Lobby;
|
||||||
@ -10,16 +11,16 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
|
|
||||||
public class RequestGameStateSegment implements Segment {
|
public class RequestGameStateSegment implements Segment {
|
||||||
|
|
||||||
private Lobby parent;
|
private final GameInstance game;
|
||||||
|
|
||||||
public RequestGameStateSegment(Lobby parent) {
|
public RequestGameStateSegment(GameInstance game) {
|
||||||
this.parent = parent;
|
this.game = game;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processRequests(Packet packet, List<Event> carrier, AtomicBoolean abort) {
|
public void processRequests(Packet packet, List<Event> carrier, AtomicBoolean abort) {
|
||||||
if (packet.containsRequestOfType(RequestType.Req)) {
|
if (packet.containsRequestOfType(RequestType.Req)) {
|
||||||
carrier.add(parent.game.getGameStateEvent());
|
carrier.add(game.getGameStateEvent());
|
||||||
}
|
}
|
||||||
packet.clear();
|
packet.clear();
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
package uulm.teamname.marvelous.server.lobby.pipelining;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.events.EventBuilder;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestBuilder;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.events.EventType;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.events.GameEvent;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.gamelogic.GameInstance;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
||||||
|
import uulm.teamname.marvelous.server.lobbymanager.Participant;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.assertj.core.api.Assertions.*;
|
||||||
|
|
||||||
|
class GameStateSegmentTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void processRequests() {
|
||||||
|
var game = mock(GameInstance.class);
|
||||||
|
var event = new EventBuilder(EventType.DisconnectEvent).buildGameEvent();
|
||||||
|
when(game.checkRequestsAndApply(any(Request.class))).thenReturn(Optional.of(List.of(event)));
|
||||||
|
var abort = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
var segment = new GameStateSegment(game);
|
||||||
|
|
||||||
|
// note that DisconnectRequests are actually never passed to the GameLogic, ever.
|
||||||
|
var packet = new Packet(
|
||||||
|
new Request[] {new RequestBuilder(RequestType.DisconnectRequest).buildGameRequest()},
|
||||||
|
null);
|
||||||
|
|
||||||
|
var carrier = new ArrayList<Event>(1);
|
||||||
|
|
||||||
|
segment.processRequests(packet, carrier, abort);
|
||||||
|
|
||||||
|
assertThat(carrier.contains(event)).isTrue();
|
||||||
|
verify(game).checkRequestsAndApply(packet.get(0));
|
||||||
|
assertThat(abort.get()).isFalse();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user