WIP: Initial commit for seperating server and client yacht classes

tags: #story[1124]
This commit is contained in:
Haoming Yin
2017-08-15 14:18:48 +12:00
parent baacd8a9c0
commit d6a436d2eb
5 changed files with 33 additions and 33 deletions
+16 -17
View File
@@ -4,9 +4,9 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import seng302.gameServer.server.messages.BoatAction;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import seng302.gameServer.server.messages.BoatAction;
import seng302.gameServer.server.messages.MarkRoundingMessage; import seng302.gameServer.server.messages.MarkRoundingMessage;
import seng302.gameServer.server.messages.MarkType; import seng302.gameServer.server.messages.MarkType;
import seng302.gameServer.server.messages.Message; import seng302.gameServer.server.messages.Message;
@@ -14,7 +14,7 @@ import seng302.gameServer.server.messages.RoundingBoatStatus;
import seng302.model.GeoPoint; import seng302.model.GeoPoint;
import seng302.model.Player; import seng302.model.Player;
import seng302.model.PolarTable; import seng302.model.PolarTable;
import seng302.model.Yacht; import seng302.model.ServerYacht;
import seng302.model.mark.CompoundMark; import seng302.model.mark.CompoundMark;
import seng302.model.mark.Mark; import seng302.model.mark.Mark;
import seng302.model.mark.MarkOrder; import seng302.model.mark.MarkOrder;
@@ -44,7 +44,7 @@ public class GameState implements Runnable {
private static String hostIpAddress; private static String hostIpAddress;
private static List<Player> players; private static List<Player> players;
private static Map<Integer, Yacht> yachts; private static Map<Integer, ServerYacht> yachts;
private static Boolean isRaceStarted; private static Boolean isRaceStarted;
private static GameStages currentStage; private static GameStages currentStage;
private static MarkOrder markOrder; private static MarkOrder markOrder;
@@ -102,7 +102,7 @@ public class GameState implements Runnable {
playerStringMap.remove(player); playerStringMap.remove(player);
} }
public static void addYacht(Integer sourceId, Yacht yacht) { public static void addYacht(Integer sourceId, ServerYacht yacht) {
yachts.put(sourceId, yacht); yachts.put(sourceId, yacht);
} }
@@ -146,7 +146,7 @@ public class GameState implements Runnable {
return GeoUtility.mmsToKnots(windSpeed); // TODO: 26/07/17 cir27 - remove magic numbers return GeoUtility.mmsToKnots(windSpeed); // TODO: 26/07/17 cir27 - remove magic numbers
} }
public static Map<Integer, Yacht> getYachts() { public static Map<Integer, ServerYacht> getYachts() {
return yachts; return yachts;
} }
@@ -185,7 +185,7 @@ public class GameState implements Runnable {
} }
public static void updateBoat(Integer sourceId, BoatAction actionType) { public static void updateBoat(Integer sourceId, BoatAction actionType) {
Yacht playerYacht = yachts.get(sourceId); ServerYacht playerYacht = yachts.get(sourceId);
switch (actionType) { switch (actionType) {
case VMG: case VMG:
playerYacht.turnToVMG(); playerYacht.turnToVMG();
@@ -215,7 +215,7 @@ public class GameState implements Runnable {
public void update() { public void update() {
Double timeInterval = (System.currentTimeMillis() - previousUpdateTime) / 1000000.0; Double timeInterval = (System.currentTimeMillis() - previousUpdateTime) / 1000000.0;
previousUpdateTime = System.currentTimeMillis(); previousUpdateTime = System.currentTimeMillis();
for (Yacht yacht : yachts.values()) { for (ServerYacht yacht : yachts.values()) {
updateVelocity(yacht); updateVelocity(yacht);
yacht.runAutoPilot(); yacht.runAutoPilot();
yacht.updateLocation(timeInterval); yacht.updateLocation(timeInterval);
@@ -226,12 +226,11 @@ public class GameState implements Runnable {
} }
private void updateVelocity(Yacht yacht) { private void updateVelocity(ServerYacht yacht) {
Double velocity = yacht.getCurrentVelocity(); Double velocity = yacht.getCurrentVelocity();
Double trueWindAngle = Math.abs(windDirection - yacht.getHeading()); Double trueWindAngle = Math.abs(windDirection - yacht.getHeading());
Double boatSpeedInKnots = PolarTable.getBoatSpeed(getWindSpeedKnots(), trueWindAngle); Double boatSpeedInKnots = PolarTable.getBoatSpeed(getWindSpeedKnots(), trueWindAngle);
Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots); Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots);
yacht.setCurrentMaxVelocity(maxBoatSpeed);
if (yacht.getSailIn() && yacht.getCurrentVelocity() <= maxBoatSpeed && maxBoatSpeed != 0d) { if (yacht.getSailIn() && yacht.getCurrentVelocity() <= maxBoatSpeed && maxBoatSpeed != 0d) {
if (velocity < maxBoatSpeed) { if (velocity < maxBoatSpeed) {
@@ -263,7 +262,7 @@ public class GameState implements Runnable {
* @throws IndexOutOfBoundsException If the next mark is null (ie the last mark in the race) * @throws IndexOutOfBoundsException If the next mark is null (ie the last mark in the race)
* Check first using {@link seng302.model.mark.MarkOrder#isLastMark(Integer)} * Check first using {@link seng302.model.mark.MarkOrder#isLastMark(Integer)}
*/ */
private Double calcDistanceToCurrentMark(Yacht yacht) throws IndexOutOfBoundsException { private Double calcDistanceToCurrentMark(ServerYacht yacht) throws IndexOutOfBoundsException {
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID(); Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID); CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
GeoPoint location = yacht.getLocation(); GeoPoint location = yacht.getLocation();
@@ -292,7 +291,7 @@ public class GameState implements Runnable {
* in-race Gate 3 - Passing any in-race Mark 4 - Passing the finish line * in-race Gate 3 - Passing any in-race Mark 4 - Passing the finish line
* @param yacht the current yacht to check for progression * @param yacht the current yacht to check for progression
*/ */
private void checkForLegProgression(Yacht yacht) { private void checkForLegProgression(ServerYacht yacht) {
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID(); Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID); CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
@@ -324,7 +323,7 @@ public class GameState implements Runnable {
* *
* @param yacht The current yacht to check for * @param yacht The current yacht to check for
*/ */
private Boolean checkStartLineCrossing(Yacht yacht) { private Boolean checkStartLineCrossing(ServerYacht yacht) {
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID(); Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID); CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
GeoPoint lastLocation = yacht.getLastLocation(); GeoPoint lastLocation = yacht.getLastLocation();
@@ -354,7 +353,7 @@ public class GameState implements Runnable {
* *
* @param yacht The current yacht to check for * @param yacht The current yacht to check for
*/ */
private Boolean checkMarkRounding(Yacht yacht) { private Boolean checkMarkRounding(ServerYacht yacht) {
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID(); Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID); CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
GeoPoint lastLocation = yacht.getLastLocation(); GeoPoint lastLocation = yacht.getLastLocation();
@@ -383,7 +382,7 @@ public class GameState implements Runnable {
* *
* @param yacht The current yacht to check for * @param yacht The current yacht to check for
*/ */
private Boolean checkGateRounding(Yacht yacht) { private Boolean checkGateRounding(ServerYacht yacht) {
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID(); Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID); CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
GeoPoint lastLocation = yacht.getLastLocation(); GeoPoint lastLocation = yacht.getLastLocation();
@@ -426,7 +425,7 @@ public class GameState implements Runnable {
* *
* @param yacht The current yacht to check for * @param yacht The current yacht to check for
*/ */
private Boolean checkFinishLineCrossing(Yacht yacht) { private Boolean checkFinishLineCrossing(ServerYacht yacht) {
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID(); Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID); CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
GeoPoint lastLocation = yacht.getLastLocation(); GeoPoint lastLocation = yacht.getLastLocation();
@@ -450,7 +449,7 @@ public class GameState implements Runnable {
return false; return false;
} }
private void sendMarkRoundingMessage(Yacht yacht) { private void sendMarkRoundingMessage(ServerYacht yacht) {
Integer sourceID = yacht.getSourceId(); Integer sourceID = yacht.getSourceId();
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID(); Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID); CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
@@ -468,7 +467,7 @@ public class GameState implements Runnable {
} }
private void logMarkRounding(Yacht yacht) { private void logMarkRounding(ServerYacht yacht) {
Mark roundingMark = yacht.getClosestCurrentMark(); Mark roundingMark = yacht.getClosestCurrentMark();
logger.debug( logger.debug(
@@ -19,6 +19,7 @@ import java.util.zip.CRC32;
import java.util.zip.Checksum; import java.util.zip.Checksum;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import seng302.gameServer.server.messages.BoatAction;
import seng302.gameServer.server.messages.BoatLocationMessage; import seng302.gameServer.server.messages.BoatLocationMessage;
import seng302.gameServer.server.messages.BoatStatus; import seng302.gameServer.server.messages.BoatStatus;
import seng302.gameServer.server.messages.BoatSubMessage; import seng302.gameServer.server.messages.BoatSubMessage;
@@ -32,13 +33,12 @@ import seng302.gameServer.server.messages.RegistrationResponseStatus;
import seng302.gameServer.server.messages.XMLMessage; import seng302.gameServer.server.messages.XMLMessage;
import seng302.gameServer.server.messages.XMLMessageSubType; import seng302.gameServer.server.messages.XMLMessageSubType;
import seng302.model.Player; import seng302.model.Player;
import seng302.model.Yacht; import seng302.model.ServerYacht;
import seng302.model.stream.packets.PacketType; import seng302.model.stream.packets.PacketType;
import seng302.model.stream.packets.StreamPacket; import seng302.model.stream.packets.StreamPacket;
import seng302.model.stream.xml.generator.Race; import seng302.model.stream.xml.generator.Race;
import seng302.model.stream.xml.generator.Regatta; import seng302.model.stream.xml.generator.Regatta;
import seng302.utilities.XMLGenerator; import seng302.utilities.XMLGenerator;
import seng302.gameServer.server.messages.BoatAction;
/** /**
* A class describing a single connection to a Client for the purposes of sending and receiving on * A class describing a single connection to a Client for the purposes of sending and receiving on
@@ -115,8 +115,7 @@ public class ServerToClientThread implements Runnable, Observer {
all = ln.lines().collect(Collectors.toList()); all = ln.lines().collect(Collectors.toList());
lName = all.get(ThreadLocalRandom.current().nextInt(0, all.size())); lName = all.get(ThreadLocalRandom.current().nextInt(0, all.size()));
ServerYacht yacht = new ServerYacht(
Yacht yacht = new Yacht(
"Yacht", sourceId, sourceId.toString(), fName, fName + " " + lName, "NZ" "Yacht", sourceId, sourceId.toString(), fName, fName + " " + lName, "NZ"
); );
@@ -221,7 +220,7 @@ public class ServerToClientThread implements Runnable, Observer {
xml = new XMLGenerator(); xml = new XMLGenerator();
Race race = new Race(); Race race = new Race();
for (Yacht yacht : GameState.getYachts().values()) { for (ServerYacht yacht : GameState.getYachts().values()) {
race.addBoat(yacht); race.addBoat(yacht);
} }
@@ -299,8 +298,8 @@ public class ServerToClientThread implements Runnable, Observer {
public void sendBoatLocationPackets() { public void sendBoatLocationPackets() {
ArrayList<Yacht> yachts = new ArrayList<>(GameState.getYachts().values()); ArrayList<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
for (Yacht yacht : yachts) { for (ServerYacht yacht : yachts) {
BoatLocationMessage boatLocationMessage = BoatLocationMessage boatLocationMessage =
new BoatLocationMessage( new BoatLocationMessage(
yacht.getSourceId(), yacht.getSourceId(),
@@ -326,7 +325,7 @@ public class ServerToClientThread implements Runnable, Observer {
RaceStatus raceStatus; RaceStatus raceStatus;
for (Player player : GameState.getPlayers()) { for (Player player : GameState.getPlayers()) {
Yacht y = player.getYacht(); ServerYacht y = player.getYacht();
if (GameState.getCurrentStage() == GameStages.PRE_RACE) { if (GameState.getCurrentStage() == GameStages.PRE_RACE) {
boatStatus = BoatStatus.PRESTART; boatStatus = BoatStatus.PRESTART;
+3 -3
View File
@@ -9,11 +9,11 @@ import java.net.Socket;
public class Player { public class Player {
private Socket socket; private Socket socket;
private Yacht yacht; private ServerYacht yacht;
private Integer lastMarkPassed; private Integer lastMarkPassed;
public Player(Socket socket, Yacht yacht) { public Player(Socket socket, ServerYacht yacht) {
this.socket = socket; this.socket = socket;
this.yacht = yacht; this.yacht = yacht;
} }
@@ -30,7 +30,7 @@ public class Player {
this.lastMarkPassed = lastMarkPassed; this.lastMarkPassed = lastMarkPassed;
} }
public Yacht getYacht() { public ServerYacht getYacht() {
return yacht; return yacht;
} }
@@ -4,13 +4,14 @@ import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import seng302.model.Yacht; import seng302.model.ServerYacht;
/** /**
* A Race object that can be parsed into XML * A Race object that can be parsed into XML
*/ */
public class Race { public class Race {
private List<Yacht> yachts;
private List<ServerYacht> yachts;
private LocalDateTime startTime; private LocalDateTime startTime;
public Race(){ public Race(){
@@ -22,7 +23,7 @@ public class Race {
* Add a boat to the race * Add a boat to the race
* @param yacht The boat to add * @param yacht The boat to add
*/ */
public void addBoat(Yacht yacht){ public void addBoat(ServerYacht yacht) {
yachts.add(yacht); yachts.add(yacht);
} }
@@ -30,7 +31,7 @@ public class Race {
* Get a list of boats in the race * Get a list of boats in the race
* @return A List of boats * @return A List of boats
*/ */
public List<Yacht> getBoats(){ public List<ServerYacht> getBoats() {
return Collections.unmodifiableList(yachts); return Collections.unmodifiableList(yachts);
} }
@@ -9,6 +9,7 @@ import seng302.gameServer.GameStages;
import seng302.gameServer.GameState; import seng302.gameServer.GameState;
import seng302.gameServer.MainServerThread; import seng302.gameServer.MainServerThread;
import seng302.gameServer.server.messages.BoatAction; import seng302.gameServer.server.messages.BoatAction;
import seng302.model.ServerYacht;
import seng302.model.Yacht; import seng302.model.Yacht;
import seng302.visualiser.ClientToServerThread; import seng302.visualiser.ClientToServerThread;
@@ -33,7 +34,7 @@ public class RegularPacketsTest {
final double TEST_DISTANCE = 10.0; final double TEST_DISTANCE = 10.0;
serverThread.startGame(); serverThread.startGame();
SleepThreadMaxDelay(); SleepThreadMaxDelay();
Yacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0); ServerYacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0);
double startAngle = yacht.getHeading(); double startAngle = yacht.getHeading();
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
clientThread.sendBoatAction(BoatAction.UPWIND); clientThread.sendBoatAction(BoatAction.UPWIND);