Added some comments to MockOutput. Also removed instance of RaceVisionByteEncoder, as it has no state, and the functions used are all static.

main
fjc40 9 years ago
parent 3481a882de
commit 01224c509a

@ -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,

Loading…
Cancel
Save