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.

229 lines
5.4 KiB

package network.Messages;
import network.Messages.Enums.MessageType;
import network.Messages.Enums.RaceStatusEnum;
import network.Messages.Enums.RaceTypeEnum;
import network.Utils.AC35UnitConverter;
import shared.model.Bearing;
import shared.model.Constants;
import java.util.List;
/**
* Represents the information in a RaceStatus message (AC streaming spec: 4.2).
*/
public class RaceStatus extends AC35Data {
/**
* The current messageVersionNumber according to the API spec.
*/
public static final byte currentMessageVersionNumber = 2;
/**
* Version number of the message.
*/
private byte messageVersionNumber;
/**
* Time the message was generated at.
* Milliseconds since unix epoch.
*/
private long currentTime;
/**
* ID number of the race.
*/
private int raceID;
/**
* The status of the race.
*/
private RaceStatusEnum raceStatus;
/**
* The expected race start time.
* Milliseconds since unix epoch.
*/
private long expectedStartTime;
/**
* The wind direction of the course.
*/
private Bearing windDirection;
/**
* The wind speed of the course.
* Knots.
*/
private double windSpeed;
/**
* The type of race this is.
*/
private RaceTypeEnum raceType;
/**
* A list of boat statuses.
* One for each boat.
*/
private List<BoatStatus> boatStatuses;
/**
* Constructs a RaceStatus message with the given parameters.
* @param messageVersionNumber The version number of the message.
* @param currentTime Time at which the message was generated.
* @param raceID The ID of the race.
* @param raceStatus The status of the race.
* @param expectedStartTime The expected start time of the race.
* @param windDirection The current wind direction in the race.
* @param windSpeed The current wind speed in the race, in knots.
* @param raceType The type of race this is.
* @param boatStatuses A list of BoatStatuses. One for each boat.
*/
public RaceStatus(byte messageVersionNumber, long currentTime, int raceID, RaceStatusEnum raceStatus, long expectedStartTime, Bearing windDirection, double windSpeed, RaceTypeEnum raceType, List<BoatStatus> boatStatuses) {
super(MessageType.RACESTATUS);
this.messageVersionNumber = messageVersionNumber;
this.currentTime = currentTime;
this.raceID = raceID;
this.raceStatus = raceStatus;
this.expectedStartTime = expectedStartTime;
this.windDirection = windDirection;
this.windSpeed = windSpeed;
this.raceType = raceType;
this.boatStatuses = boatStatuses;
}
/**
* Returns the version number of this message.
* @return The version number of the message.
*/
public byte getMessageVersionNumber() {
return messageVersionNumber;
}
/**
* Returns the current time at which this message was generated. Milliseconds since unix epoch.
* @return Time this message was generated at.
*/
public long getCurrentTime()
{
return currentTime;
}
/**
* Returns the RaceID.
* @return The raceID.
*/
public int getRaceID()
{
return raceID;
}
/**
* Returns the race status.
* @return The current race status.
*/
public RaceStatusEnum getRaceStatus()
{
return raceStatus;
}
/**
* Returns the expected start time for the race. Milliseconds since unix epoch.
* @return Expected start time for the race.
*/
public long getExpectedStartTime()
{
return expectedStartTime;
}
/**
* Returns the current direction of the wind in the race.
* @return Current wind direction.
*/
public Bearing getWindDirection()
{
return windDirection;
}
/**
* Returns the wind speed for this race status, in knots.
* @return Wind speed in knots.
*/
public double getWindSpeed()
{
return windSpeed;
}
/**
* Retrusn the type of race this is.
* @return The type of race this is.
*/
public RaceTypeEnum getRaceType()
{
return raceType;
}
/**
* Returns the list of BoatStatuses. One for each boat.
* @return List of BoatStatuses.
*/
public List<BoatStatus> getBoatStatuses()
{
return boatStatuses;
}
public boolean isNotActive() {
return raceStatus == RaceStatusEnum.NOT_ACTIVE;
}
public boolean isWarning() {
return raceStatus == RaceStatusEnum.WARNING;
}
public boolean isPreparatory() {
return raceStatus == RaceStatusEnum.PREPARATORY;
}
public boolean isStarted() {
return raceStatus == RaceStatusEnum.STARTED;
}
public boolean isFinished() {
return raceStatus == RaceStatusEnum.FINISHED;
}
public boolean isRetired() {
return raceStatus == RaceStatusEnum.RETIRED;
}
public boolean isAbandoned() {
return raceStatus == RaceStatusEnum.ABANDONED;
}
public boolean isPostponed() {
return raceStatus == RaceStatusEnum.POSTPONED;
}
public boolean isTerminated() {
return raceStatus == RaceStatusEnum.TERMINATED;
}
public boolean isStartTimeSet() {
return raceStatus != RaceStatusEnum.RACE_START_TIME_NOT_SET;
}
public boolean isPrestart() {
return raceStatus == RaceStatusEnum.PRESTART;
}
}