From 8569d3f2dc2a35bbf75a66dfe0a5a5d0304e006d Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Fri, 28 Apr 2017 17:00:04 +1200 Subject: [PATCH] Added a few decoders and unit converters - Units can be converted from int to degrees as a double - XML message now keeps the most recent XML file #story[782] --- mock/src/main/java/seng302/Model/Race.java | 2 +- network/pom.xml | 5 +++ .../MessageDecoders/XMLMessageDecoder.java | 1 + .../Networking/Utils/AC35UnitConverter.java | 21 ++++++++++++ .../seng302/Networking/Utils/XMLMessage.java | 4 +++ .../seng302/Networking/VisualiserInput.java | 34 +++++++++++++++++++ 6 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 network/src/main/java/seng302/Networking/Utils/AC35UnitConverter.java 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: