You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.0 KiB
93 lines
3.0 KiB
package network.MessageEncoders;
|
|
|
|
|
|
import network.Exceptions.InvalidMessageException;
|
|
import network.Messages.AC35Data;
|
|
import network.Messages.AverageWind;
|
|
|
|
import java.nio.ByteBuffer;
|
|
|
|
import static network.Utils.AC35UnitConverter.*;
|
|
import static network.Utils.ByteConverter.intToBytes;
|
|
import static network.Utils.ByteConverter.longToBytes;
|
|
|
|
/**
|
|
* This encoder can encode a {@link AverageWind} message.
|
|
*/
|
|
public class AverageWindEncoder implements MessageEncoder {
|
|
|
|
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
public AverageWindEncoder() {
|
|
}
|
|
|
|
|
|
@Override
|
|
public byte[] encode(AC35Data message) throws InvalidMessageException {
|
|
|
|
try {
|
|
|
|
//Downcast.
|
|
AverageWind averageWind = (AverageWind) message;
|
|
|
|
|
|
byte messageVersionNumber = averageWind.getMessageVersionNumber();
|
|
|
|
long time = averageWind.getTime();
|
|
byte[] byteTime = longToBytes(time, 6);
|
|
|
|
long rawPeriod = averageWind.getRawPeriod();
|
|
int rawPeriodInt = packAverageWindPeriod(rawPeriod);
|
|
byte[] byteRawPeriod = intToBytes(rawPeriodInt, 2);
|
|
|
|
double rawSampleSpeed = averageWind.getRawSpeedKnots();
|
|
int rawSampleSpeedInt = packKnotsToMMperSec(rawSampleSpeed);
|
|
byte[] byteRawSpeed = intToBytes(rawSampleSpeedInt, 2);
|
|
|
|
long period2 = averageWind.getSampleTwoPeriod();
|
|
int period2Int = packAverageWindPeriod(period2);
|
|
byte[] bytePeriod2 = intToBytes(period2Int, 2);
|
|
|
|
double speed2 = averageWind.getSampleTwoSpeedKnots();
|
|
int speed2Int = packKnotsToMMperSec(speed2);
|
|
byte[] byteSpeed2 = intToBytes(speed2Int, 2);
|
|
|
|
long period3 = averageWind.getSampleThreePeriod();
|
|
int period3Int = packAverageWindPeriod(period3);
|
|
byte[] bytePeriod3 = intToBytes(period3Int, 2);
|
|
|
|
double speed3 = averageWind.getSampleThreeSpeedKnots();
|
|
int speed3Int = packKnotsToMMperSec(speed3);
|
|
byte[] byteSpeed3 = intToBytes(speed3Int, 2);
|
|
|
|
long period4 = averageWind.getSampleFourPeriod();
|
|
int period4Int = packAverageWindPeriod(period4);
|
|
byte[] bytePeriod4 = intToBytes(period4Int, 2);
|
|
|
|
double speed4 = averageWind.getSampleFourSpeedKnots();
|
|
int speed4Int = packKnotsToMMperSec(speed4);
|
|
byte[] byteSpeed4 = intToBytes(speed4Int, 2);
|
|
|
|
|
|
ByteBuffer result = ByteBuffer.allocate(23);
|
|
result.put(messageVersionNumber);
|
|
result.put(byteTime);
|
|
result.put(byteRawPeriod);
|
|
result.put(byteRawSpeed);
|
|
result.put(bytePeriod2);
|
|
result.put(byteSpeed2);
|
|
result.put(bytePeriod3);
|
|
result.put(byteSpeed3);
|
|
result.put(bytePeriod4);
|
|
result.put(byteSpeed4);
|
|
return result.array();
|
|
|
|
} catch (Exception e) {
|
|
throw new InvalidMessageException("Could not encode AverageWind message.", e);
|
|
}
|
|
|
|
}
|
|
}
|