Added BoatLocationEncoder.
Updated BoatLocationDecoder test to use new encoder. Updated MockOutput to use new encoder. It logs a warning if encoding fails. #story[1095]
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package network.MessageEncoders;
|
||||
|
||||
|
||||
import network.Messages.AC35Data;
|
||||
import network.Messages.BoatLocation;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import static network.Utils.ByteConverter.intToBytes;
|
||||
import static network.Utils.ByteConverter.longToBytes;
|
||||
|
||||
/**
|
||||
* This encoder can encode a {@link BoatLocation} message.
|
||||
*/
|
||||
public class BoatLocationEncoder implements MessageEncoder {
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public BoatLocationEncoder() {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public byte[] encode(AC35Data message) {
|
||||
|
||||
//Downcast.
|
||||
BoatLocation boatLocation = (BoatLocation) message;
|
||||
|
||||
|
||||
int messageVersionNumber = 0b1;
|
||||
byte[] messageVersionBytes = intToBytes(messageVersionNumber, 1);
|
||||
byte[] time = longToBytes(boatLocation.getTime(), 6);
|
||||
byte[] sourceID = intToBytes(boatLocation.getSourceID(), 4);
|
||||
byte[] seqNum = longToBytes(boatLocation.getSequenceNumber(), 4);
|
||||
byte[] deviceType = intToBytes(boatLocation.getDeviceType(), 1);
|
||||
byte[] latitude = intToBytes(boatLocation.getLatitude(), 4);
|
||||
byte[] longitude = intToBytes(boatLocation.getLongitude(), 4);
|
||||
byte[] altitude = intToBytes(boatLocation.getAltitude(), 4);
|
||||
byte[] heading = intToBytes(boatLocation.getHeading(), 2);
|
||||
byte[] pitch = intToBytes(boatLocation.getPitch(), 2);
|
||||
byte[] roll = intToBytes(boatLocation.getRoll(), 2);
|
||||
byte[] boatSpeed = intToBytes(boatLocation.getBoatSpeed(), 2);
|
||||
byte[] cog = intToBytes(boatLocation.getBoatCOG(), 2);
|
||||
byte[] sog = intToBytes(boatLocation.getBoatSOG(), 2);
|
||||
byte[] apparentWindSpeed = intToBytes(boatLocation.getApparentWindSpeed(), 2);
|
||||
byte[] apparentWindAngle = intToBytes(boatLocation.getApparentWindAngle(), 2);
|
||||
byte[] trueWindSpeed = intToBytes(boatLocation.getTrueWindSpeed(), 2);
|
||||
byte[] trueWindDirection = intToBytes(boatLocation.getTrueWindDirection(), 2);
|
||||
byte[] trueWindAngle = intToBytes(boatLocation.getTrueWindAngle(), 2);
|
||||
byte[] currentDrift = intToBytes(boatLocation.getCurrentDrift(), 2);
|
||||
byte[] currentSet = intToBytes(boatLocation.getCurrentSet(), 2);
|
||||
byte[] rudderAngle = intToBytes(boatLocation.getRudderAngle(), 2);
|
||||
|
||||
ByteBuffer result = ByteBuffer.allocate(56);
|
||||
result.put(messageVersionBytes);
|
||||
result.put(time);
|
||||
result.put(sourceID);
|
||||
result.put(seqNum);
|
||||
result.put(deviceType);
|
||||
result.put(latitude);
|
||||
result.put(longitude);
|
||||
result.put(altitude);
|
||||
result.put(heading);
|
||||
result.put(pitch);
|
||||
result.put(roll);
|
||||
result.put(boatSpeed);
|
||||
result.put(cog);
|
||||
result.put(sog);
|
||||
result.put(apparentWindSpeed);
|
||||
result.put(apparentWindAngle);
|
||||
result.put(trueWindSpeed);
|
||||
result.put(trueWindDirection);
|
||||
result.put(trueWindAngle);
|
||||
result.put(currentDrift);
|
||||
result.put(currentSet);
|
||||
result.put(rudderAngle);
|
||||
|
||||
return result.array();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,8 @@ public class EncoderFactory {
|
||||
|
||||
switch (type) {
|
||||
|
||||
case BOATLOCATION: return new BoatLocationEncoder();
|
||||
|
||||
case REQUEST_TO_JOIN: return new RequestToJoinEncoder();
|
||||
|
||||
case JOIN_ACCEPTANCE: return new JoinAcceptanceEncoder();
|
||||
|
||||
@@ -220,56 +220,6 @@ public class RaceVisionByteEncoder {
|
||||
|
||||
}
|
||||
|
||||
public static byte[] boatLocation(BoatLocation boatLocation){
|
||||
int messageVersionNumber = 0b1;
|
||||
byte[] time = longToBytes(boatLocation.getTime(), 6);
|
||||
byte[] sourceID = intToBytes(boatLocation.getSourceID(), 4);
|
||||
byte[] seqNum = longToBytes(boatLocation.getSequenceNumber(), 4);
|
||||
byte[] deviceType = intToBytes(boatLocation.getDeviceType(), 1);
|
||||
byte[] latitude = intToBytes(boatLocation.getLatitude(), 4);
|
||||
byte[] longitude = intToBytes(boatLocation.getLongitude(), 4);
|
||||
byte[] altitude = intToBytes(boatLocation.getAltitude(), 4);
|
||||
byte[] heading = intToBytes(boatLocation.getHeading(), 2);
|
||||
byte[] pitch = intToBytes(boatLocation.getPitch(), 2);
|
||||
byte[] roll = intToBytes(boatLocation.getRoll(), 2);
|
||||
byte[] boatSpeed = intToBytes(boatLocation.getBoatSpeed(), 2);
|
||||
byte[] cog = intToBytes(boatLocation.getBoatCOG(), 2);
|
||||
byte[] sog = intToBytes(boatLocation.getBoatSOG(), 2);
|
||||
byte[] apparentWindSpeed = intToBytes(boatLocation.getApparentWindSpeed(), 2);
|
||||
byte[] apparentWindAngle = intToBytes(boatLocation.getApparentWindAngle(), 2);
|
||||
byte[] trueWindSpeed = intToBytes(boatLocation.getTrueWindSpeed(), 2);
|
||||
byte[] trueWindDirection = intToBytes(boatLocation.getTrueWindDirection(), 2);
|
||||
byte[] trueWindAngle = intToBytes(boatLocation.getTrueWindAngle(), 2);
|
||||
byte[] currentDrift = intToBytes(boatLocation.getCurrentDrift(), 2);
|
||||
byte[] currentSet = intToBytes(boatLocation.getCurrentSet(), 2);
|
||||
byte[] rudderAngle = intToBytes(boatLocation.getRudderAngle(), 2);
|
||||
|
||||
ByteBuffer result = ByteBuffer.allocate(56);
|
||||
result.put(intToBytes(messageVersionNumber, 1));
|
||||
result.put(time);
|
||||
result.put(sourceID);
|
||||
result.put(seqNum);
|
||||
result.put(deviceType);
|
||||
result.put(latitude);
|
||||
result.put(longitude);
|
||||
result.put(altitude);
|
||||
result.put(heading);
|
||||
result.put(pitch);
|
||||
result.put(roll);
|
||||
result.put(boatSpeed);
|
||||
result.put(cog);
|
||||
result.put(sog);
|
||||
result.put(apparentWindSpeed);
|
||||
result.put(apparentWindAngle);
|
||||
result.put(trueWindSpeed);
|
||||
result.put(trueWindDirection);
|
||||
result.put(trueWindAngle);
|
||||
result.put(currentDrift);
|
||||
result.put(currentSet);
|
||||
result.put(rudderAngle);
|
||||
return result.array();
|
||||
}
|
||||
|
||||
public static byte[] markRounding(int time, int ackNumber, int raceID, int sourceID, int boatStatus, int roundingSide, int markType, int markID){
|
||||
int messageVersionNumber = 0b1;
|
||||
byte[] byteTime = longToBytes(time, 6);
|
||||
|
||||
Reference in New Issue
Block a user