Commit Graph
26 Commits
Author SHA1 Message Date
fjc40 aeee8ca748 Added polar data file.
Added PolarParse class - currently commented out as it depends on polar table class.

#story[900]
2017-05-10 15:11:51 +12:00
fjc40 a32775eab6 Fixed a few javadoc issues. 2017-05-08 10:59:13 +12:00
fjc40 b247244665 Did some large tidy ups, refactoring, and documenting.
Network:
Moved the Network message classes from the Utils package to the Messages package.
Renamed BoatLocationMessage to BoatLocation and BoatStatusMessage to BoatStatus to be consistent with other message classes.
Renamed the BoatStatus enumeration to BoatStatusEnum as it conflicted with BoatStatus (the message).
Moved the BoatStatusEnum and MessageType enumerations from the Utils package to the Messages/Enums package.
Changed the BoatStatusEnum and MessageType enumerations to use map look ups in the enum.fromByte(b) method - this means that there's less copy and pasted values, and the fromByte function doesn't need to be modified if new enumerations are added.
Added a sequenceNumber member to the Heartbeat class.
Added an InvalidMessageException in the package Networking/Exceptions. This is thrown when a message is read, but it is invalid in some way.
Refactored/tidied up the Networking/BinaryMessageEncoder and Decoder classes. The decoder throws InvalidMessageExceptions instead of returning null.

Visualiser:
VisualiserInput now wraps a DataInputStream around the socket. This provides the stream.readFully(buffer) function, which is a blocking read, removing the need for busy wait loops. Replaced the getBytes() function with getNextMessage() and getNextMessageBytes(). These read the next message from the socket, and return it as a message object and a byte array, respectively.
Changed the current heartbeat timeout to 10 seconds. Added some work-in-progress code to attempt to reconnect when connection is lost. It currently doesn't work. I think Fan-Wu was doing a proper implementation, however.
VisualiserInput also has a queue of received events. Currently not really used, but could be useful in the future. Events get added as they are read.
Changed VisualiserInputs main loop to use instanceOf instead of switch+case. Feedback wanted - are there any downsides to using this instanceOf method?

#story[778,782]
2017-05-08 03:29:33 +12:00
fjc40 466e22437b Visualiser. The nullptr issues relating to the XML data files appears to be fixed. Essentially, the StartController.startRaceNoScaling() function was being called as soon possible, before it was even ready - setRaceClock either hadn't been called or hadn't finished executing yet, so the StartController.raceClock member was null, causing crashes.
Also changed the while(visualiserInput.getRaceStatus() == null) loops to an if-then-return early block. They caused the program to freeze if the race data source wasn't sending any race status messages (currently, our mock doesn't send any once the race has finished).

#story[782]
2017-05-07 18:34:44 +12:00
fjc40 020c0329b0 Merge remote-tracking branch 'origin/TCPDisconnection' into submission 2017-05-07 16:55:07 +12:00
fjc40 83ce9b99d2 Mockoutput's main loop now pops messages off the message queue, rather than iterating over it like an array, and clearing it (this could have threading issues where the iteration starts (with e.g., 5 messages), as it is sending the messages another one is added, and then it ends up clearing the sent messages, and the unsent message.
Made a few quick fixes (to be tidied a bit later) to Mock.Race class. It now has this.startTime, instead of the AnimationTimers having their own starTime value. RaceStatus messages are now sent properly (still need a refactor though), so they actually send the race star time - this means that the visualizer using the mock data source displays the correct time instead of (midnight, jan 1, 1970).

Removed one of the constructors from RaceStatus - it allowed for constructing and sending essentially invalid RaceStatus messages, and simply wasn't needed.

Added a temporary title ("RaceVision - Team 7") to the visualiser - may be worth changing when we decide on a team name.

Fixed a bug with the order of operations in visualiser.StartController.countdownTimer(). Calling begin race before hiding panes caused them to never be hidden.

Mock.Event. Changed the scaleFactor to 5x for the time being - to easier testing of things like pre-race timers, countdowns, etc...

#story[778,782]
2017-05-07 15:52:34 +12:00
fjc40 01224c509a Added some comments to MockOutput. Also removed instance of RaceVisionByteEncoder, as it has no state, and the functions used are all static. 2017-05-07 14:43:11 +12:00
fjc40 3481a882de Fixed Team Oracle's boat name in mock data file.
#story[778]
2017-05-07 14:28:31 +12:00
fjc40 ecebace9f1 Merge branch 'splitIntoTwoModules' of eng-git.canterbury.ac.nz:seng302-2017/team-7 into splitIntoTwoModules 2017-04-28 11:22:05 +12:00
fjc40 873089707d Fixed the RaceStatusDecoder not deserializing BoatStatus (a subobject of RaceStatus) properly.
RaceVisionByteEncoder.heartBeat now uses a long (and grabs the low 4 bytes from it), as the streaming spec requires a 4 byte unsigned int.
#story[778] #story[782]
2017-04-28 01:32:39 +12:00
fjc40 d29c0a9439 Mock now serializes and sends Boat.xml, Race.xml, Regatta.xml, Heartbeat, BoatLocation messages.
#story[778]
2017-04-28 01:30:03 +12:00
fjc40 90f8bec415 Moved several classes from seng302.model to its own module - sharedModel (this is supposed to contain any shared data model code between mock and visualiser). Specifically, Regatta, Boat, BoatInRace, Constants, GPSCoordinate, Leg, Marker.
Updated RaceVisionByteEncoder.raceStatus to accept a Racestatus object rather than a bunch of parameters.
Added getters to RaceStatus class.
Updated some tests.
Removed Network tests from Mock, as they were duplicated.
2017-04-28 01:27:45 +12:00
fjc40 50cb31b85f Moved networking code into the network module. 2017-04-27 20:28:07 +12:00
fjc40 06d786d581 Merge remote-tracking branch 'origin/networkingTest' into splitIntoTwoModules
# Conflicts:
#	mock/src/main/java/seng302/RaceEventMessages/BoatLocationMessage.java
#             Selected copy from splitIntoTwoModules.
2017-04-27 20:02:18 +12:00
fjc40 2876eec1e4 Added some exception classes to encapsulate the internal exceptions that can occur when sending Boat/race/regatta data.
#story[778]
2017-04-25 11:24:33 +12:00
fjc40 bf5ea193af Mock App now passes an OutputStream into the "Event" class. This is where data is written to (i.e., writing data over tcp socket).
Updated Event and Race class to write to this stream, and added some TODO notes which point out where we need to properly serialize messages, when merged with networking code.
2017-04-24 21:53:51 +12:00
fjc40 2ce84e3be4 Added myself to the .mailmap file. 2017-04-24 20:23:29 +12:00
fjc40 091ee4735b Race.simulateRace() function now generates a BoatLocationMessage after updating the position of each boat. Currently we just print the message to stdout.
Added functions to convert knots (as a double) to mm/sec (as an int) to BoatLocationMessage class.
Added toString function to BoatLocationMessage class.
Added a sequence number member to the BoatInRace class.
Added Knots to meters per second conversion factor to Contants class.

#story[788]
2017-04-24 20:19:39 +12:00
fjc40andFan-Wu Yang a1ab8347ca Added Encodings to RaceVisionByteEncoder
- Added boatLocation Encoding
- Added markRounding Encoding
- Added courseWind Encoding
- Added averageWind Encoding
#story[778]
2017-04-21 16:23:48 +12:00
fjc40 149c312080 Merge branch 'isolatingMock' of eng-git.canterbury.ac.nz:seng302-2017/team-7 into isolatingMock 2017-04-21 13:38:01 +12:00
fjc40 9e1b3365bf Added helper functions to BoatLocationMessage which convert between the datatypes used by the message and datatypes used by our model. (Converts boat heading, wind angle, gps coordinate).
#story[778]
2017-04-21 13:19:49 +12:00
fjc40 ef53dee7fe Changed device type constants to bytes.
#fix #story[778]
2017-04-21 12:56:00 +12:00
fjc40 421663c145 Added device type enumerations as static ints for BoatLocationMessage.
#story[778]
2017-04-21 12:54:48 +12:00
fjc40andFan-Wu Yang a7e0ffae42 Added class to encapsulate a BoatLocationMessage.
#story[778]
2017-04-21 12:43:36 +12:00
fjc40 1a085e881d Merge branch 'isolatingMock' of eng-git.canterbury.ac.nz:seng302-2017/team-7 into isolatingMock 2017-04-21 12:26:34 +12:00
fjc40 8da67d1dbc Added class to encapsulate a BoatLocationMessage.
#story[778]
2017-04-21 12:25:57 +12:00