diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 0b36ab16..e6379369 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -29,6 +29,7 @@ import seng302.model.ServerYacht; import seng302.model.mark.CompoundMark; import seng302.model.mark.Mark; import seng302.model.mark.MarkOrder; +import seng302.model.token.Token; import seng302.utilities.GeoUtility; import seng302.utilities.XMLParser; @@ -65,6 +66,7 @@ public class GameState implements Runnable { private static String hostIpAddress; private static List players; private static Map yachts; + private static List tokens; private static Boolean isRaceStarted; private static GameStages currentStage; private static MarkOrder markOrder; @@ -91,6 +93,7 @@ public class GameState implements Runnable { windSpeed = 10000d; this.hostIpAddress = hostIpAddress; yachts = new HashMap<>(); + tokens = new ArrayList<>(); players = new ArrayList<>(); GameState.hostIpAddress = hostIpAddress; customizationFlag = false; @@ -137,6 +140,10 @@ public class GameState implements Runnable { return players; } + public static List getTokens() { + return tokens; + } + public static void addPlayer(Player player) { players.add(player); String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName() diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 83fb304c..1e37e11d 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -29,8 +29,6 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate { private static final int MAX_WIND_SPEED = 12000; private static final int MIN_WIND_SPEED = 8000; - public static int windSpeed = 1000; - private boolean terminated; private Thread thread; diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 3a9b4057..7d516370 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -30,29 +30,13 @@ import seng302.gameServer.messages.RegistrationResponseStatus; import seng302.gameServer.messages.XMLMessage; import seng302.gameServer.messages.XMLMessageSubType; import seng302.gameServer.messages.YachtEventCodeMessage; -import seng302.gameServer.messages.YachtEventCodeMessage; import seng302.model.Player; import seng302.model.ServerYacht; import seng302.model.stream.packets.PacketType; import seng302.model.stream.packets.StreamPacket; -import seng302.model.stream.xml.generator.Race; -import seng302.model.stream.xml.generator.Regatta; -import seng302.utilities.XMLGenerator; -import seng302.gameServer.messages.BoatAction; -import seng302.gameServer.messages.BoatLocationMessage; -import seng302.gameServer.messages.ClientType; -import seng302.gameServer.messages.Message; -import seng302.gameServer.messages.RegistrationResponseMessage; -import seng302.gameServer.messages.RegistrationResponseStatus; -import seng302.gameServer.messages.XMLMessage; -import seng302.gameServer.messages.XMLMessageSubType; -import seng302.gameServer.messages.YachtEventCodeMessage; -import seng302.model.Player; -import seng302.model.ServerYacht; -import seng302.model.stream.packets.PacketType; -import seng302.model.stream.packets.StreamPacket; -import seng302.model.stream.xml.generator.Race; -import seng302.model.stream.xml.generator.Regatta; +import seng302.model.stream.xml.generator.RaceXMLTemplate; +import seng302.model.stream.xml.generator.RegattaXMLTemplate; +import seng302.model.token.Token; import seng302.utilities.XMLGenerator; /** @@ -92,7 +76,7 @@ public class ServerToClientThread implements Runnable, Observer { private ClientType clientType; private Boolean isRegistered = false; - private XMLGenerator xml; + private XMLGenerator xmlGenerator; private List connectionListeners = new ArrayList<>(); private DisconnectListener disconnectListener; @@ -250,34 +234,43 @@ public class ServerToClientThread implements Runnable, Observer { logger.warn("Closed serverToClientThread" + thread, 1); } - public void sendSetupMessages() { - xml = new XMLGenerator(); - Race race = new Race(); - for (ServerYacht yacht : GameState.getYachts().values()) { - race.addBoat(yacht); - } + /** + * Generates XML messages of each type and sends them to the client + */ + // TODO: 29/08/17 wmu16 - This functionality should not even be here + public void sendSetupMessages() { + xmlGenerator = new XMLGenerator(); + List yachts = new ArrayList<>(GameState.getYachts().values()); + List tokens = GameState.getTokens(); + RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens); + xmlGenerator.setRaceTemplate(raceXMLTemplate); //@TODO calculate lat/lng values - xml.setRegatta( - new Regatta( + xmlGenerator.setRegattaTemplate( + new RegattaXMLTemplate( "Party Parrot Test Server", "Bermuda Test Course", 57.6679590, 11.8503233) ); - xml.setRace(race); - XMLMessage xmlMessage; - xmlMessage = new XMLMessage(xml.getRegattaAsXml(), XMLMessageSubType.REGATTA, - xml.getRegattaAsXml().length()); - sendMessage(xmlMessage); + XMLMessage regattaXMLMessage = new XMLMessage( + xmlGenerator.getRegattaAsXml(), + XMLMessageSubType.REGATTA, + xmlGenerator.getRegattaAsXml().length()); - xmlMessage = new XMLMessage(xml.getBoatsAsXml(), XMLMessageSubType.BOAT, - xml.getBoatsAsXml().length()); - sendMessage(xmlMessage); + XMLMessage boatXMLMessage = new XMLMessage( + xmlGenerator.getBoatsAsXml(), + XMLMessageSubType.BOAT, + xmlGenerator.getBoatsAsXml().length()); - xmlMessage = new XMLMessage(xml.getRaceAsXml(), XMLMessageSubType.RACE, - xml.getRaceAsXml().length()); - sendMessage(xmlMessage); + XMLMessage raceXMLMessage = new XMLMessage( + xmlGenerator.getRaceAsXml(), + XMLMessageSubType.RACE, + xmlGenerator.getRaceAsXml().length()); + + sendMessage(regattaXMLMessage); + sendMessage(boatXMLMessage); + sendMessage(raceXMLMessage); } private void closeSocket() { diff --git a/src/main/java/seng302/model/mark/MarkOrder.java b/src/main/java/seng302/model/mark/MarkOrder.java index ab3a1848..0e250e99 100644 --- a/src/main/java/seng302/model/mark/MarkOrder.java +++ b/src/main/java/seng302/model/mark/MarkOrder.java @@ -11,8 +11,10 @@ import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import seng302.gameServer.messages.RoundingSide; -import seng302.model.stream.xml.generator.Race; +import seng302.model.ServerYacht; +import seng302.model.stream.xml.generator.RaceXMLTemplate; import seng302.model.stream.xml.parser.RaceXMLData; +import seng302.model.token.Token; import seng302.utilities.XMLGenerator; import seng302.utilities.XMLParser; import java.util.*; @@ -125,7 +127,10 @@ public class MarkOrder { private void loadRaceProperties(){ XMLGenerator generator = new XMLGenerator(); - generator.setRace(new Race()); + // TODO: 29/08/17 wmu16 - This is terrible, having to make a template just to receive constant data + generator.setRaceTemplate(new RaceXMLTemplate( + new ArrayList<>(), + new ArrayList<>())); String raceXML = generator.getRaceAsXml(); diff --git a/src/main/java/seng302/model/stream/xml/generator/Race.java b/src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java similarity index 71% rename from src/main/java/seng302/model/stream/xml/generator/Race.java rename to src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java index cf42cb2c..8ce7d5ad 100644 --- a/src/main/java/seng302/model/stream/xml/generator/Race.java +++ b/src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java @@ -5,28 +5,23 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import seng302.model.ServerYacht; +import seng302.model.token.Token; /** * A Race object that can be parsed into XML */ -public class Race { +public class RaceXMLTemplate { private List yachts; private LocalDateTime startTime; + private List tokens; - public Race(){ - yachts = new ArrayList<>(); + public RaceXMLTemplate(List yachts, List tokens) { + this.yachts = yachts; + this.tokens = tokens; startTime = LocalDateTime.now(); } - /** - * Add a boat to the race - * @param yacht The boat to add - */ - public void addBoat(ServerYacht yacht) { - yachts.add(yacht); - } - /** * Get a list of boats in the race * @return A List of boats @@ -35,6 +30,15 @@ public class Race { return Collections.unmodifiableList(yachts); } + /** + * Get a list of tokens in the race + * + * @return A list of tokens + */ + public List getTokens() { + return Collections.unmodifiableList(tokens); + } + /** * Set the time until the race starts * @param seconds The time in seconds until the race starts diff --git a/src/main/java/seng302/model/stream/xml/generator/Regatta.java b/src/main/java/seng302/model/stream/xml/generator/RegattaXMLTemplate.java similarity index 91% rename from src/main/java/seng302/model/stream/xml/generator/Regatta.java rename to src/main/java/seng302/model/stream/xml/generator/RegattaXMLTemplate.java index fa802e01..8bd344ba 100644 --- a/src/main/java/seng302/model/stream/xml/generator/Regatta.java +++ b/src/main/java/seng302/model/stream/xml/generator/RegattaXMLTemplate.java @@ -3,7 +3,7 @@ package seng302.model.stream.xml.generator; /** * A Race regatta that can be parsed into XML */ -public class Regatta { +public class RegattaXMLTemplate { private final Double DEFAULT_ALTITUDE = 0d; private final Integer DEFAULT_REGATTA_ID = 0; @@ -18,7 +18,7 @@ public class Regatta { private Integer utcOffset; private Double magneticVariation; - public Regatta(String name, String courseName, Double latitude, Double longitude) { + public RegattaXMLTemplate(String name, String courseName, Double latitude, Double longitude) { this.name = name; this.id = DEFAULT_REGATTA_ID; this.courseName = courseName; diff --git a/src/main/java/seng302/model/token/Token.java b/src/main/java/seng302/model/token/Token.java new file mode 100644 index 00000000..9c55c41c --- /dev/null +++ b/src/main/java/seng302/model/token/Token.java @@ -0,0 +1,22 @@ +package seng302.model.token; + +import seng302.model.GeoPoint; + +/** + * A class describing a game token + * Created by wmu16 on 28/08/17. + */ +public class Token extends GeoPoint { + + private TokenType tokenType; + + public Token(TokenType tokenType, double lat, double lng) { + super(lat, lng); + this.tokenType = tokenType; + } + + public TokenType getTokenType() { + return tokenType; + } + +} diff --git a/src/main/java/seng302/model/token/TokenType.java b/src/main/java/seng302/model/token/TokenType.java new file mode 100644 index 00000000..d5c2df01 --- /dev/null +++ b/src/main/java/seng302/model/token/TokenType.java @@ -0,0 +1,31 @@ +package seng302.model.token; + +/** + * An enum describing the different types of game objects + * Created by wmu16 on 28/08/17. + */ +public enum TokenType { + BOOST(0), + HANDLING(1); + + private int value; + + TokenType(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + + public static TokenType getToken(int value) { + switch (value) { + case 0: + return BOOST; + case 1: + return HANDLING; + default: + return BOOST; + } + } +} diff --git a/src/main/java/seng302/utilities/XMLGenerator.java b/src/main/java/seng302/utilities/XMLGenerator.java index 7fcc8efd..4915bea1 100644 --- a/src/main/java/seng302/utilities/XMLGenerator.java +++ b/src/main/java/seng302/utilities/XMLGenerator.java @@ -7,8 +7,8 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; -import seng302.model.stream.xml.generator.Race; -import seng302.model.stream.xml.generator.Regatta; +import seng302.model.stream.xml.generator.RaceXMLTemplate; +import seng302.model.stream.xml.generator.RegattaXMLTemplate; import seng302.gameServer.messages.XMLMessageSubType; /** @@ -20,8 +20,8 @@ public class XMLGenerator { private static final String BOATS_TEMPLATE_NAME = "boats.ftlh"; private static final String RACE_TEMPLATE_NAME = "race.ftlh"; private Configuration configuration; - private Regatta regatta; - private Race race; + private RegattaXMLTemplate regatta; + private RaceXMLTemplate race; /** * Set up a configuration instance for Apache Freemake @@ -48,7 +48,7 @@ public class XMLGenerator { * Note: This must be set before a regatta message can be generated * @param regatta The race regatta */ - public void setRegatta(Regatta regatta){ + public void setRegattaTemplate(RegattaXMLTemplate regatta) { this.regatta = regatta; } @@ -57,7 +57,7 @@ public class XMLGenerator { * Note: This must be set before a boat or race message can be generated * @param race The race */ - public void setRace(Race race){ + public void setRaceTemplate(RaceXMLTemplate race) { this.race = race; } diff --git a/src/main/resources/server_config/xml_templates/race.ftlh b/src/main/resources/server_config/xml_templates/race.ftlh index 8fa95216..0dfb65e4 100644 --- a/src/main/resources/server_config/xml_templates/race.ftlh +++ b/src/main/resources/server_config/xml_templates/race.ftlh @@ -11,6 +11,12 @@ + + <#list tokens as token> + + + +