Added some comments to MockOutput. Also removed instance of RaceVisionByteEncoder, as it has no state, and the functions used are all static.
This commit is contained in:
@@ -16,40 +16,49 @@ import java.net.*;
|
|||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TCP client to recive information from AC35 data source
|
* TCP server to send race information to connected clients.
|
||||||
*/
|
*/
|
||||||
public class MockOutput implements Runnable
|
public class MockOutput implements Runnable
|
||||||
{
|
{
|
||||||
|
///Timestamp of the last sent heartbeat message.
|
||||||
private long lastHeartbeatTime;
|
private long lastHeartbeatTime;
|
||||||
private RaceVisionByteEncoder messageEncoder = new RaceVisionByteEncoder();
|
|
||||||
|
|
||||||
//socket port 5003 as 4940 is ac35 live port and 4941 is ac35 test port
|
///Port to expose server on.
|
||||||
|
private int serverPort = 4942;
|
||||||
|
///Socket used to listen for clients on.
|
||||||
private ServerSocket serverSocket;
|
private ServerSocket serverSocket;
|
||||||
|
///Socket used to communicate with a client.
|
||||||
private Socket mockSocket;
|
private Socket mockSocket;
|
||||||
|
///Output stream which wraps around mockSocket outstream.
|
||||||
private DataOutputStream outToVisualiser;
|
private DataOutputStream outToVisualiser;
|
||||||
|
|
||||||
//a buffer that contains items that are waiting to be sent
|
///A queue that contains items that are waiting to be sent.
|
||||||
private ArrayBlockingQueue<byte[]> messagesToSendBuffer = new ArrayBlockingQueue<>(99999999);
|
private ArrayBlockingQueue<byte[]> messagesToSendBuffer = new ArrayBlockingQueue<>(99999999);
|
||||||
|
|
||||||
|
///Sequence numbers used in messages.
|
||||||
private short messageNumber = 1;
|
private short messageNumber = 1;
|
||||||
private short xmlSequenceNumber = 1;
|
private short xmlSequenceNumber = 1;
|
||||||
private int heartbeatSequenceNum = 1;
|
private int heartbeatSequenceNum = 1;
|
||||||
private int boatLocationSequenceNumber = 1;
|
private int boatLocationSequenceNumber = 1;
|
||||||
private int raceStatusSequenceNumber = 1;
|
private int raceStatusSequenceNumber = 1;
|
||||||
|
///Strings containing XML data as strings.
|
||||||
private String raceXml;
|
private String raceXml;
|
||||||
private String regattaXml;
|
private String regattaXml;
|
||||||
private String boatsXml;
|
private String boatsXml;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ctor.
|
||||||
|
* @throws IOException if server socket cannot be opened.
|
||||||
|
*/
|
||||||
public MockOutput() throws IOException {
|
public MockOutput() throws IOException {
|
||||||
lastHeartbeatTime = System.currentTimeMillis();
|
lastHeartbeatTime = System.currentTimeMillis();
|
||||||
serverSocket = new ServerSocket(4942);
|
serverSocket = new ServerSocket(serverPort);
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* calculates the time since last heartbeat
|
* Calculates the time since last heartbeat message, in seconds.
|
||||||
* @return time since last heartbeat
|
* @return Time since last heartbeat message, in seconds.
|
||||||
*/
|
*/
|
||||||
private double timeSinceHeartbeat() {
|
private double timeSinceHeartbeat() {
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
@@ -63,7 +72,7 @@ public class MockOutput implements Runnable
|
|||||||
* @return message for heartbeat data
|
* @return message for heartbeat data
|
||||||
*/
|
*/
|
||||||
private byte[] heartbeat(){
|
private byte[] heartbeat(){
|
||||||
byte[] heartbeatMessage = messageEncoder.heartBeat(heartbeatSequenceNum);
|
byte[] heartbeatMessage = RaceVisionByteEncoder.heartBeat(heartbeatSequenceNum);
|
||||||
heartbeatSequenceNum++;
|
heartbeatSequenceNum++;
|
||||||
BinaryMessageEncoder binaryMessageEncoder = new BinaryMessageEncoder(MessageType.HEARTBEAT, System.currentTimeMillis(), messageNumber, (short)heartbeatMessage.length, heartbeatMessage);
|
BinaryMessageEncoder binaryMessageEncoder = new BinaryMessageEncoder(MessageType.HEARTBEAT, System.currentTimeMillis(), messageNumber, (short)heartbeatMessage.length, heartbeatMessage);
|
||||||
messageNumber++;
|
messageNumber++;
|
||||||
@@ -103,7 +112,7 @@ public class MockOutput implements Runnable
|
|||||||
boatLocationSequenceNumber++;
|
boatLocationSequenceNumber++;
|
||||||
|
|
||||||
//encodeds the messages
|
//encodeds the messages
|
||||||
byte[] encodedBoatLoc = messageEncoder.boatLocation(boatLocationMessage);
|
byte[] encodedBoatLoc = RaceVisionByteEncoder.boatLocation(boatLocationMessage);
|
||||||
|
|
||||||
//encodeds the full message with header
|
//encodeds the full message with header
|
||||||
BinaryMessageEncoder binaryMessageEncoder = new BinaryMessageEncoder(MessageType.BOATLOCATION, System.currentTimeMillis(), messageNumber, (short)encodedBoatLoc.length,
|
BinaryMessageEncoder binaryMessageEncoder = new BinaryMessageEncoder(MessageType.BOATLOCATION, System.currentTimeMillis(), messageNumber, (short)encodedBoatLoc.length,
|
||||||
@@ -125,7 +134,7 @@ public class MockOutput implements Runnable
|
|||||||
raceStatusSequenceNumber++;
|
raceStatusSequenceNumber++;
|
||||||
|
|
||||||
//encodeds the messages
|
//encodeds the messages
|
||||||
byte[] encodedRaceStatus = messageEncoder.raceStatus(raceStatus);
|
byte[] encodedRaceStatus = RaceVisionByteEncoder.raceStatus(raceStatus);
|
||||||
|
|
||||||
//encodeds the full message with header
|
//encodeds the full message with header
|
||||||
BinaryMessageEncoder binaryMessageEncoder = new BinaryMessageEncoder(MessageType.RACESTATUS, System.currentTimeMillis(), messageNumber, (short)encodedRaceStatus.length,
|
BinaryMessageEncoder binaryMessageEncoder = new BinaryMessageEncoder(MessageType.RACESTATUS, System.currentTimeMillis(), messageNumber, (short)encodedRaceStatus.length,
|
||||||
|
|||||||
Reference in New Issue
Block a user