mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 06:18:44 +00:00
Refactored some of the XMLGenerator code. Added tokens to the generated XML
Refactor not complete. Generation needs some tidying. #story[1250]
This commit is contained in:
@@ -29,6 +29,7 @@ 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;
|
||||||
|
import seng302.model.token.Token;
|
||||||
import seng302.utilities.GeoUtility;
|
import seng302.utilities.GeoUtility;
|
||||||
import seng302.utilities.XMLParser;
|
import seng302.utilities.XMLParser;
|
||||||
|
|
||||||
@@ -65,6 +66,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, ServerYacht> yachts;
|
private static Map<Integer, ServerYacht> yachts;
|
||||||
|
private static List<Token> tokens;
|
||||||
private static Boolean isRaceStarted;
|
private static Boolean isRaceStarted;
|
||||||
private static GameStages currentStage;
|
private static GameStages currentStage;
|
||||||
private static MarkOrder markOrder;
|
private static MarkOrder markOrder;
|
||||||
@@ -91,6 +93,7 @@ public class GameState implements Runnable {
|
|||||||
windSpeed = 10000d;
|
windSpeed = 10000d;
|
||||||
this.hostIpAddress = hostIpAddress;
|
this.hostIpAddress = hostIpAddress;
|
||||||
yachts = new HashMap<>();
|
yachts = new HashMap<>();
|
||||||
|
tokens = new ArrayList<>();
|
||||||
players = new ArrayList<>();
|
players = new ArrayList<>();
|
||||||
GameState.hostIpAddress = hostIpAddress;
|
GameState.hostIpAddress = hostIpAddress;
|
||||||
customizationFlag = false;
|
customizationFlag = false;
|
||||||
@@ -137,6 +140,10 @@ public class GameState implements Runnable {
|
|||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<Token> getTokens() {
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
public static void addPlayer(Player player) {
|
public static void addPlayer(Player player) {
|
||||||
players.add(player);
|
players.add(player);
|
||||||
String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName()
|
String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName()
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
private static final int MAX_WIND_SPEED = 12000;
|
private static final int MAX_WIND_SPEED = 12000;
|
||||||
private static final int MIN_WIND_SPEED = 8000;
|
private static final int MIN_WIND_SPEED = 8000;
|
||||||
|
|
||||||
public static int windSpeed = 1000;
|
|
||||||
|
|
||||||
private boolean terminated;
|
private boolean terminated;
|
||||||
|
|
||||||
private Thread thread;
|
private Thread thread;
|
||||||
|
|||||||
@@ -30,29 +30,13 @@ import seng302.gameServer.messages.RegistrationResponseStatus;
|
|||||||
import seng302.gameServer.messages.XMLMessage;
|
import seng302.gameServer.messages.XMLMessage;
|
||||||
import seng302.gameServer.messages.XMLMessageSubType;
|
import seng302.gameServer.messages.XMLMessageSubType;
|
||||||
import seng302.gameServer.messages.YachtEventCodeMessage;
|
import seng302.gameServer.messages.YachtEventCodeMessage;
|
||||||
import seng302.gameServer.messages.YachtEventCodeMessage;
|
|
||||||
import seng302.model.Player;
|
import seng302.model.Player;
|
||||||
import seng302.model.ServerYacht;
|
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.RaceXMLTemplate;
|
||||||
import seng302.model.stream.xml.generator.Regatta;
|
import seng302.model.stream.xml.generator.RegattaXMLTemplate;
|
||||||
import seng302.utilities.XMLGenerator;
|
import seng302.model.token.Token;
|
||||||
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.utilities.XMLGenerator;
|
import seng302.utilities.XMLGenerator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -92,7 +76,7 @@ public class ServerToClientThread implements Runnable, Observer {
|
|||||||
private ClientType clientType;
|
private ClientType clientType;
|
||||||
private Boolean isRegistered = false;
|
private Boolean isRegistered = false;
|
||||||
|
|
||||||
private XMLGenerator xml;
|
private XMLGenerator xmlGenerator;
|
||||||
|
|
||||||
private List<ConnectionListener> connectionListeners = new ArrayList<>();
|
private List<ConnectionListener> connectionListeners = new ArrayList<>();
|
||||||
private DisconnectListener disconnectListener;
|
private DisconnectListener disconnectListener;
|
||||||
@@ -250,34 +234,43 @@ public class ServerToClientThread implements Runnable, Observer {
|
|||||||
logger.warn("Closed serverToClientThread" + thread, 1);
|
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<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
||||||
|
List<Token> tokens = GameState.getTokens();
|
||||||
|
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
||||||
|
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
||||||
|
|
||||||
//@TODO calculate lat/lng values
|
//@TODO calculate lat/lng values
|
||||||
xml.setRegatta(
|
xmlGenerator.setRegattaTemplate(
|
||||||
new Regatta(
|
new RegattaXMLTemplate(
|
||||||
"Party Parrot Test Server", "Bermuda Test Course",
|
"Party Parrot Test Server", "Bermuda Test Course",
|
||||||
57.6679590, 11.8503233)
|
57.6679590, 11.8503233)
|
||||||
);
|
);
|
||||||
xml.setRace(race);
|
|
||||||
|
|
||||||
XMLMessage xmlMessage;
|
XMLMessage regattaXMLMessage = new XMLMessage(
|
||||||
xmlMessage = new XMLMessage(xml.getRegattaAsXml(), XMLMessageSubType.REGATTA,
|
xmlGenerator.getRegattaAsXml(),
|
||||||
xml.getRegattaAsXml().length());
|
XMLMessageSubType.REGATTA,
|
||||||
sendMessage(xmlMessage);
|
xmlGenerator.getRegattaAsXml().length());
|
||||||
|
|
||||||
xmlMessage = new XMLMessage(xml.getBoatsAsXml(), XMLMessageSubType.BOAT,
|
XMLMessage boatXMLMessage = new XMLMessage(
|
||||||
xml.getBoatsAsXml().length());
|
xmlGenerator.getBoatsAsXml(),
|
||||||
sendMessage(xmlMessage);
|
XMLMessageSubType.BOAT,
|
||||||
|
xmlGenerator.getBoatsAsXml().length());
|
||||||
|
|
||||||
xmlMessage = new XMLMessage(xml.getRaceAsXml(), XMLMessageSubType.RACE,
|
XMLMessage raceXMLMessage = new XMLMessage(
|
||||||
xml.getRaceAsXml().length());
|
xmlGenerator.getRaceAsXml(),
|
||||||
sendMessage(xmlMessage);
|
XMLMessageSubType.RACE,
|
||||||
|
xmlGenerator.getRaceAsXml().length());
|
||||||
|
|
||||||
|
sendMessage(regattaXMLMessage);
|
||||||
|
sendMessage(boatXMLMessage);
|
||||||
|
sendMessage(raceXMLMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void closeSocket() {
|
private void closeSocket() {
|
||||||
|
|||||||
@@ -11,8 +11,10 @@ import org.w3c.dom.Document;
|
|||||||
import org.xml.sax.InputSource;
|
import org.xml.sax.InputSource;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
import seng302.gameServer.messages.RoundingSide;
|
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.stream.xml.parser.RaceXMLData;
|
||||||
|
import seng302.model.token.Token;
|
||||||
import seng302.utilities.XMLGenerator;
|
import seng302.utilities.XMLGenerator;
|
||||||
import seng302.utilities.XMLParser;
|
import seng302.utilities.XMLParser;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -125,7 +127,10 @@ public class MarkOrder {
|
|||||||
private void loadRaceProperties(){
|
private void loadRaceProperties(){
|
||||||
XMLGenerator generator = new XMLGenerator();
|
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();
|
String raceXML = generator.getRaceAsXml();
|
||||||
|
|
||||||
|
|||||||
+15
-11
@@ -5,28 +5,23 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import seng302.model.ServerYacht;
|
import seng302.model.ServerYacht;
|
||||||
|
import seng302.model.token.Token;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Race object that can be parsed into XML
|
* A Race object that can be parsed into XML
|
||||||
*/
|
*/
|
||||||
public class Race {
|
public class RaceXMLTemplate {
|
||||||
|
|
||||||
private List<ServerYacht> yachts;
|
private List<ServerYacht> yachts;
|
||||||
private LocalDateTime startTime;
|
private LocalDateTime startTime;
|
||||||
|
private List<Token> tokens;
|
||||||
|
|
||||||
public Race(){
|
public RaceXMLTemplate(List<ServerYacht> yachts, List<Token> tokens) {
|
||||||
yachts = new ArrayList<>();
|
this.yachts = yachts;
|
||||||
|
this.tokens = tokens;
|
||||||
startTime = LocalDateTime.now();
|
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
|
* Get a list of boats in the race
|
||||||
* @return A List of boats
|
* @return A List of boats
|
||||||
@@ -35,6 +30,15 @@ public class Race {
|
|||||||
return Collections.unmodifiableList(yachts);
|
return Collections.unmodifiableList(yachts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of tokens in the race
|
||||||
|
*
|
||||||
|
* @return A list of tokens
|
||||||
|
*/
|
||||||
|
public List<Token> getTokens() {
|
||||||
|
return Collections.unmodifiableList(tokens);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the time until the race starts
|
* Set the time until the race starts
|
||||||
* @param seconds The time in seconds until the race starts
|
* @param seconds The time in seconds until the race starts
|
||||||
+2
-2
@@ -3,7 +3,7 @@ package seng302.model.stream.xml.generator;
|
|||||||
/**
|
/**
|
||||||
* A Race regatta that can be parsed into XML
|
* A Race regatta that can be parsed into XML
|
||||||
*/
|
*/
|
||||||
public class Regatta {
|
public class RegattaXMLTemplate {
|
||||||
private final Double DEFAULT_ALTITUDE = 0d;
|
private final Double DEFAULT_ALTITUDE = 0d;
|
||||||
private final Integer DEFAULT_REGATTA_ID = 0;
|
private final Integer DEFAULT_REGATTA_ID = 0;
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ public class Regatta {
|
|||||||
private Integer utcOffset;
|
private Integer utcOffset;
|
||||||
private Double magneticVariation;
|
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.name = name;
|
||||||
this.id = DEFAULT_REGATTA_ID;
|
this.id = DEFAULT_REGATTA_ID;
|
||||||
this.courseName = courseName;
|
this.courseName = courseName;
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,8 +7,8 @@ import java.io.ByteArrayOutputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import seng302.model.stream.xml.generator.Race;
|
import seng302.model.stream.xml.generator.RaceXMLTemplate;
|
||||||
import seng302.model.stream.xml.generator.Regatta;
|
import seng302.model.stream.xml.generator.RegattaXMLTemplate;
|
||||||
import seng302.gameServer.messages.XMLMessageSubType;
|
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 BOATS_TEMPLATE_NAME = "boats.ftlh";
|
||||||
private static final String RACE_TEMPLATE_NAME = "race.ftlh";
|
private static final String RACE_TEMPLATE_NAME = "race.ftlh";
|
||||||
private Configuration configuration;
|
private Configuration configuration;
|
||||||
private Regatta regatta;
|
private RegattaXMLTemplate regatta;
|
||||||
private Race race;
|
private RaceXMLTemplate race;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up a configuration instance for Apache Freemake
|
* 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
|
* Note: This must be set before a regatta message can be generated
|
||||||
* @param regatta The race regatta
|
* @param regatta The race regatta
|
||||||
*/
|
*/
|
||||||
public void setRegatta(Regatta regatta){
|
public void setRegattaTemplate(RegattaXMLTemplate regatta) {
|
||||||
this.regatta = 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
|
* Note: This must be set before a boat or race message can be generated
|
||||||
* @param race The race
|
* @param race The race
|
||||||
*/
|
*/
|
||||||
public void setRace(Race race){
|
public void setRaceTemplate(RaceXMLTemplate race) {
|
||||||
this.race = race;
|
this.race = race;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,12 @@
|
|||||||
</#list>
|
</#list>
|
||||||
</Participants>
|
</Participants>
|
||||||
|
|
||||||
|
<Tokens>
|
||||||
|
<#list tokens as token>
|
||||||
|
<Token TokenType="${token.type}" TargetLat="${token.targetLat}" TargetLng="${token.targetLng}"/>
|
||||||
|
</#list>
|
||||||
|
</Tokens>
|
||||||
|
|
||||||
<Course>
|
<Course>
|
||||||
<CompoundMark CompoundMarkID="1" Name="Mark0">
|
<CompoundMark CompoundMarkID="1" Name="Mark0">
|
||||||
<Mark SeqID="1" Name="Start Line 1" TargetLat="57.670603" TargetLng="11.828262" SourceID="122" />
|
<Mark SeqID="1" Name="Start Line 1" TargetLat="57.670603" TargetLng="11.828262" SourceID="122" />
|
||||||
|
|||||||
Reference in New Issue
Block a user