diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java
index 6e1920c2..808d7f7c 100644
--- a/mock/src/main/java/seng302/Model/Race.java
+++ b/mock/src/main/java/seng302/Model/Race.java
@@ -214,7 +214,7 @@ public class Race implements Runnable {
//We have finished creating the message.
- mockOutput.parseBoatLocation();
+ mockOutput.parseBoatLocation(boat);
} else {
diff --git a/network/pom.xml b/network/pom.xml
index 40087f2d..98590fe8 100644
--- a/network/pom.xml
+++ b/network/pom.xml
@@ -45,6 +45,11 @@
6.11
test
+
+ seng302
+ visualiser
+ 1.0-SNAPSHOT
+
diff --git a/network/src/main/java/seng302/Networking/MessageDecoders/XMLMessageDecoder.java b/network/src/main/java/seng302/Networking/MessageDecoders/XMLMessageDecoder.java
index bdae4db7..1770262b 100644
--- a/network/src/main/java/seng302/Networking/MessageDecoders/XMLMessageDecoder.java
+++ b/network/src/main/java/seng302/Networking/MessageDecoders/XMLMessageDecoder.java
@@ -86,4 +86,5 @@ public class XMLMessageDecoder {
InputSource is = new InputSource(new StringReader(xmlMessage));
return is;
}
+
}
diff --git a/network/src/main/java/seng302/Networking/Utils/AC35UnitConverter.java b/network/src/main/java/seng302/Networking/Utils/AC35UnitConverter.java
new file mode 100644
index 00000000..2c4d13d8
--- /dev/null
+++ b/network/src/main/java/seng302/Networking/Utils/AC35UnitConverter.java
@@ -0,0 +1,21 @@
+package seng302.Networking.Utils;
+
+/**
+ * Created by fwy13 on 28/04/17.
+ */
+public class AC35UnitConverter {
+
+ public static double convertGPS(long value){
+ //converts latitude or longitue to angle
+ return (double) value * 180.0/21474836418.0;//2^31 = 21474836418
+ }
+
+ public static double convertHeading(long value){
+ return (double) value * 360.0/65536.0;//2^15
+ }
+
+ public static double convertTrueWindAngle(long value){
+ return (double) value * 180.0/32768.0;//-2^15 to 2^15
+ }
+
+}
diff --git a/network/src/main/java/seng302/Networking/Utils/XMLMessage.java b/network/src/main/java/seng302/Networking/Utils/XMLMessage.java
index 75d15c54..9eaf07ef 100644
--- a/network/src/main/java/seng302/Networking/Utils/XMLMessage.java
+++ b/network/src/main/java/seng302/Networking/Utils/XMLMessage.java
@@ -31,4 +31,8 @@ public class XMLMessage extends AC35Data{
public InputSource getXmlMessage() {
return xmlMessage;
}
+
+ public int getXmlMsgSubType() {
+ return xmlMsgSubType;
+ }
}
diff --git a/network/src/main/java/seng302/Networking/VisualiserInput.java b/network/src/main/java/seng302/Networking/VisualiserInput.java
index baaa7c8a..a8d82956 100644
--- a/network/src/main/java/seng302/Networking/VisualiserInput.java
+++ b/network/src/main/java/seng302/Networking/VisualiserInput.java
@@ -1,13 +1,20 @@
package seng302.Networking;
+import org.xml.sax.SAXException;
+import seng302.Mock.BoatXMLReader;
+import seng302.Mock.RegattaXMLReader;
+import seng302.Mock.StreamedCourseXMLReader;
import seng302.Networking.BinaryMessageDecoder;
import seng302.Networking.MessageDecoders.*;
import seng302.Networking.Utils.*;
+import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.TimeUnit;
import static seng302.Networking.Utils.ByteConverter.bytesToInt;
@@ -27,12 +34,17 @@ public class VisualiserInput implements Runnable
long heartbeatSeqNum;
+ private Map boatLocation;
+ private BoatXMLReader boatXMLReader;
+ private StreamedCourseXMLReader streamedCourseXMLReader;
+ private RegattaXMLReader regattaXMLReader;
VisualiserInput() throws IOException{
// connectionSocket = new Socket(InetAddress.getLocalHost(), 4942);
+ boatLocation = new HashMap<>();
//this is the test data that streams form the AC35 website
connectionSocket = new Socket("livedata.americascup.com",4941);
@@ -106,6 +118,20 @@ public class VisualiserInput implements Runnable
break;
case XMLMESSAGE:
// System.out.println("XML Message!");
+ XMLMessage xml = (XMLMessage) data;/*
+ try {
+ if (xml.getXmlMsgSubType() == xml.XMLTypeRegatta){
+ regattaXMLReader = new RegattaXMLReader(xml.getXmlMessage());
+ } else if (xml.getXmlMsgSubType() == xml.XMLTypeRace){
+ streamedCourseXMLReader = new StreamedCourseXMLReader(xml.getXmlMessage());
+ } else if (xml.getXmlMsgSubType() == xml.XMLTypeBoat){
+ boatXMLReader = new BoatXMLReader(xml.getXmlMessage());
+ }
+ } catch (SAXException e) {
+ e.printStackTrace();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ }*/
System.out.println(((XMLMessage)data).getXmlMessage());
break;
case RACESTARTSTATUS:
@@ -124,6 +150,14 @@ public class VisualiserInput implements Runnable
//no decoder
break;
case BOATLOCATION:
+ BoatLocationMessage msg = (BoatLocationMessage) data;
+ if (boatLocation.containsKey(msg.getSourceID())){
+ if (msg.getTime() > boatLocation.get(msg.getSourceID()).getTime()){
+ boatLocation.put(msg.getSourceID(), msg);
+ }
+ }else{
+ boatLocation.put(msg.getSourceID(), msg);
+ }
// System.out.println("Boat Location Message!");
break;
case MARKROUNDING: