@ -1,7 +1,9 @@
package mock.model ;
import network.AckSequencer ;
import network.Messages.* ;
import network.Messages.Enums.BoatLocationDeviceEnum ;
import network.Messages.Enums.XMLMessageType ;
import shared.model.Bearing ;
import shared.model.CompoundMark ;
import shared.model.Mark ;
@ -22,10 +24,29 @@ public class RaceServer {
* /
private int boatLocationSequenceNumber = 1 ;
/ * *
* The sequence number of race XML messages .
* /
private int raceXMLSeqNumber ;
/ * *
* The sequence number of boat XML messages .
* /
private int boatXMLSeqNumber ;
/ * *
* The sequence number of regatta XML messages .
* /
private int regattaXMLSeqNumber ;
public RaceServer ( MockRace race , LatestMessages latestMessages ) {
this . race = race ;
this . latestMessages = latestMessages ;
this . raceXMLSeqNumber = race . getRaceDataSource ( ) . getSequenceNumber ( ) ;
//this.boatXMLSeqNumber = race.getBoatDataSource().getSequenceNumber();
//this.regattaXMLSeqNumber = race.getRegattaDataSource().getSequenceNumber();
}
/ * *
@ -45,8 +66,46 @@ public class RaceServer {
snapshotMessages . add ( parseRaceStatus ( ) ) ;
latestMessages . setSnapshot ( snapshotMessages ) ;
updateXMLFiles ( ) ;
}
/ * *
* Checks if the race / boat / regatta data sources have changed , and if they have , update their xml representations .
* /
private void updateXMLFiles ( ) {
updateRaceXMLFile ( ) ;
//updateBoatXMLFile();
//updateRegattaXMLFile();
}
/ * *
* Checks if the race data source has changed , and if it has , updates LatestMessages ' race xml message .
* /
private void updateRaceXMLFile ( ) {
if ( raceXMLSeqNumber ! = race . getRaceDataSource ( ) . getSequenceNumber ( ) ) {
//TODO generate XML string from race data source
String raceXMLString = "test" ; //TODO
XMLMessage message = createXMLMessage ( raceXMLString , XMLMessageType . RACE ) ;
latestMessages . setXMLMessage ( message ) ;
raceXMLSeqNumber = race . getRaceDataSource ( ) . getSequenceNumber ( ) ;
}
}
/ * *
* Checks if the boat data source has changed , and if it has , updates LatestMessages ' boat xml message .
* /
private void updateBoatXMLFile ( ) {
}
/ * *
* Checks if the regatta data source has changed , and if it has , updates LatestMessages ' regatta xml message .
* /
private void updateRegattaXMLFile ( ) {
}
/ * *
* Parses an individual marker boat , and returns it .
@ -178,4 +237,41 @@ public class RaceServer {
return raceStatus ;
}
/ * *
* Creates an XMLMessage of a specified subtype using the xml contents string .
* @param xmlString The contents of the xml file .
* @param messageType The subtype of xml message ( race , regatta , boat ) .
* @return The created XMLMessage object .
* /
private XMLMessage createXMLMessage ( String xmlString , XMLMessageType messageType ) {
//Get the correct sequence number to use.
int sequenceNumber = 0 ;
if ( messageType = = XMLMessageType . RACE ) {
sequenceNumber = this . raceXMLSeqNumber ;
} else if ( messageType = = XMLMessageType . BOAT ) {
sequenceNumber = this . boatXMLSeqNumber ;
} else if ( messageType = = XMLMessageType . REGATTA ) {
sequenceNumber = this . regattaXMLSeqNumber ;
}
//Create the message.
XMLMessage message = new XMLMessage (
XMLMessage . currentVersionNumber ,
AckSequencer . getNextAckNum ( ) ,
System . currentTimeMillis ( ) ,
messageType ,
sequenceNumber ,
xmlString ) ;
return message ;
}
}