Merge branch 'master' into story70
# Conflicts: # racevisionGame/src/main/java/visualiser/Controllers/HostController.java # racevisionGame/src/main/java/visualiser/Controllers/TitleController.java # racevisionGame/src/main/java/visualiser/app/App.java
This commit is contained in:
@@ -61,12 +61,7 @@ public class ConnectionAcceptor implements Runnable {
|
||||
*/
|
||||
private SourceIdAllocator sourceIdAllocator;
|
||||
|
||||
//race xml sequence number
|
||||
private short raceXMLSequenceNumber;
|
||||
//boat xml sequence number
|
||||
private short boatXMLSequenceNumber;
|
||||
//regatta xml sequence number
|
||||
private short regattaXMLSequenceNumber;
|
||||
|
||||
//
|
||||
private RaceLogic raceLogic = null;
|
||||
|
||||
@@ -209,77 +204,6 @@ public class ConnectionAcceptor implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Race XML to send.
|
||||
* @param raceXml XML to send to the Client.
|
||||
*/
|
||||
public void setRaceXml(String raceXml) {
|
||||
//Create the message.
|
||||
XMLMessage message = this.createXMLMessage(raceXml, XMLMessageType.RACE);
|
||||
|
||||
//Place it in LatestMessages.
|
||||
this.latestMessages.setRaceXMLMessage(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Regatta XMl to send.
|
||||
* @param regattaXml XML to send to Client.
|
||||
*/
|
||||
public void setRegattaXml(String regattaXml) {
|
||||
//Create the message.
|
||||
XMLMessage message = this.createXMLMessage(regattaXml, XMLMessageType.REGATTA);
|
||||
|
||||
//Place it in LatestMessages.
|
||||
this.latestMessages.setRegattaXMLMessage(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Boats XML to send.
|
||||
* @param boatsXml XMl to send to the Client.
|
||||
*/
|
||||
public void setBoatsXml(String boatsXml) {
|
||||
//Create the message.
|
||||
XMLMessage message = this.createXMLMessage(boatsXml, XMLMessageType.BOAT);
|
||||
|
||||
//Place it in LatestMessages.
|
||||
this.latestMessages.setBoatXMLMessage(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an XMLMessage of a specified subtype using the xml contents string.
|
||||
* @param xmlString The contents of the xml file.
|
||||
* @param messageType The subtype of xml message (race, regatta, boat).
|
||||
* @return The created XMLMessage object.
|
||||
*/
|
||||
private XMLMessage createXMLMessage(String xmlString, XMLMessageType messageType) {
|
||||
|
||||
//Get the correct sequence number to use, and increment it.
|
||||
short sequenceNumber = 0;
|
||||
if (messageType == XMLMessageType.RACE) {
|
||||
sequenceNumber = this.raceXMLSequenceNumber;
|
||||
this.raceXMLSequenceNumber++;
|
||||
|
||||
} else if (messageType == XMLMessageType.BOAT) {
|
||||
sequenceNumber = this.boatXMLSequenceNumber;
|
||||
this.boatXMLSequenceNumber++;
|
||||
|
||||
} else if (messageType == XMLMessageType.REGATTA) {
|
||||
sequenceNumber = this.regattaXMLSequenceNumber;
|
||||
this.regattaXMLSequenceNumber++;
|
||||
|
||||
}
|
||||
|
||||
//Create the message.
|
||||
XMLMessage message = new XMLMessage(
|
||||
XMLMessage.currentVersionNumber,
|
||||
AckSequencer.getNextAckNum(),
|
||||
System.currentTimeMillis(),
|
||||
messageType,
|
||||
sequenceNumber,
|
||||
xmlString);
|
||||
|
||||
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,9 @@ import mock.dataInput.PolarParser;
|
||||
import mock.exceptions.EventConstructionException;
|
||||
import mock.model.*;
|
||||
import mock.model.commandFactory.CompositeCommand;
|
||||
import mock.model.wind.RandomWindGenerator;
|
||||
import mock.model.wind.ShiftingWindGenerator;
|
||||
import mock.model.wind.WindGenerator;
|
||||
import mock.xml.RaceXMLCreator;
|
||||
import network.Messages.LatestMessages;
|
||||
import org.xml.sax.SAXException;
|
||||
@@ -18,13 +21,12 @@ import shared.model.Constants;
|
||||
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import java.io.IOException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -113,6 +115,7 @@ public class Event {
|
||||
this.xmlFileType = XMLFileType.Contents;
|
||||
|
||||
this.boatPolars = PolarParser.parse("mock/polars/acc_polars.csv");
|
||||
PolarParser.parseNewPolars("mock/polars/acc_polars.csv");
|
||||
|
||||
|
||||
//Parse the XML files into data sources.
|
||||
@@ -127,18 +130,14 @@ public class Event {
|
||||
|
||||
}
|
||||
|
||||
this.sourceIdAllocator = new SourceIdAllocator(raceDataSource.getParticipants());
|
||||
|
||||
this.compositeCommand = new CompositeCommand();
|
||||
this.latestMessages = new LatestMessages();
|
||||
|
||||
//Create and start race.
|
||||
WindGenerator windGenerator = new RandomWindGenerator(
|
||||
WindGenerator windGenerator = new ShiftingWindGenerator(
|
||||
Bearing.fromDegrees(225),
|
||||
Bearing.fromDegrees(215),
|
||||
Bearing.fromDegrees(235),
|
||||
12d,
|
||||
8d,
|
||||
16d );
|
||||
12
|
||||
);
|
||||
RaceLogic newRace = new RaceLogic(
|
||||
new MockRace(
|
||||
boatDataSource,
|
||||
@@ -155,6 +154,7 @@ public class Event {
|
||||
|
||||
|
||||
//Create connection acceptor.
|
||||
this.sourceIdAllocator = new SourceIdAllocator(newRace.getRace());
|
||||
|
||||
try {
|
||||
this.connectionAcceptor = new ConnectionAcceptor(latestMessages, compositeCommand, sourceIdAllocator, newRace);
|
||||
@@ -167,8 +167,6 @@ public class Event {
|
||||
this.connectionThread = new Thread(connectionAcceptor, "Event.Start()->ConnectionAcceptor thread");
|
||||
connectionThread.start();
|
||||
|
||||
sendXMLs();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -181,18 +179,6 @@ public class Event {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Sends out each xml string, via the mock output
|
||||
*/
|
||||
private void sendXMLs() {
|
||||
|
||||
connectionAcceptor.setRegattaXml(regattaXML);
|
||||
|
||||
connectionAcceptor.setRaceXml(raceXML);
|
||||
|
||||
connectionAcceptor.setBoatsXml(boatXML);
|
||||
}
|
||||
|
||||
|
||||
//TODO remove this after demo on 18th august!
|
||||
/**
|
||||
@@ -203,7 +189,7 @@ public class Event {
|
||||
public static String setRaceXMLAtCurrentTimeToNow(String raceXML) {
|
||||
|
||||
//The start time is current time + 4 minutes. prestart is 3 minutes, and we add another minute.
|
||||
long millisecondsToAdd = Constants.RacePreStartTime + (1 * 60 * 1000);
|
||||
long millisecondsToAdd = Constants.RacePreStartTime + Constants.RacePreparatoryTime;
|
||||
long secondsToAdd = millisecondsToAdd / 1000;
|
||||
//Scale the time using our time scalar.
|
||||
secondsToAdd = secondsToAdd / Constants.RaceTimeScale;
|
||||
|
||||
@@ -27,7 +27,12 @@ public class MockOutput implements RunnableWithFramePeriod {
|
||||
*/
|
||||
private LatestMessages latestMessages;
|
||||
|
||||
//These sequence number track the last race/boat/regatta xml message we've sent.
|
||||
private int lastSentRaceNumber = -1;
|
||||
|
||||
private int lastSentBoatNumber = -1;
|
||||
|
||||
private int lastSentRegattaNumber = -1;
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +74,6 @@ public class MockOutput implements RunnableWithFramePeriod {
|
||||
|
||||
|
||||
long previousFrameTime = System.currentTimeMillis();
|
||||
boolean sentXMLs = false;
|
||||
|
||||
|
||||
|
||||
@@ -82,16 +86,26 @@ public class MockOutput implements RunnableWithFramePeriod {
|
||||
previousFrameTime = currentFrameTime;
|
||||
|
||||
|
||||
//Send XML messages.
|
||||
if (!sentXMLs) {
|
||||
|
||||
//Send XML messages if needed.
|
||||
|
||||
if (lastSentRaceNumber != latestMessages.getRaceXMLMessage().getSequenceNumber()) {
|
||||
lastSentRaceNumber = latestMessages.getRaceXMLMessage().getSequenceNumber();
|
||||
outgoingMessages.put(latestMessages.getRaceXMLMessage());
|
||||
outgoingMessages.put(latestMessages.getRegattaXMLMessage());
|
||||
outgoingMessages.put(latestMessages.getBoatXMLMessage());
|
||||
|
||||
sentXMLs = true;
|
||||
}
|
||||
|
||||
if (lastSentBoatNumber != latestMessages.getBoatXMLMessage().getSequenceNumber()) {
|
||||
lastSentBoatNumber = latestMessages.getBoatXMLMessage().getSequenceNumber();
|
||||
outgoingMessages.put(latestMessages.getBoatXMLMessage());
|
||||
}
|
||||
|
||||
if (lastSentRegattaNumber != latestMessages.getRegattaXMLMessage().getSequenceNumber()) {
|
||||
lastSentRegattaNumber = latestMessages.getRegattaXMLMessage().getSequenceNumber();
|
||||
outgoingMessages.put(latestMessages.getRegattaXMLMessage());
|
||||
}
|
||||
|
||||
|
||||
|
||||
List<AC35Data> snapshot = latestMessages.getSnapshot();
|
||||
for (AC35Data message : snapshot) {
|
||||
outgoingMessages.put(message);
|
||||
|
||||
Reference in New Issue
Block a user