mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Boat status changes to finished when a boat finishes the race
Tags: #story[829]
This commit is contained in:
@@ -14,6 +14,8 @@ public class ServerThread implements Runnable, Observer {
|
|||||||
private StreamingServerSocket server;
|
private StreamingServerSocket server;
|
||||||
private long startTime;
|
private long startTime;
|
||||||
boolean raceStarted = false;
|
boolean raceStarted = false;
|
||||||
|
boolean raceFinished = false;
|
||||||
|
Map<Integer,Boolean> boatsFinished = new HashMap<>();
|
||||||
private List<Boat> boats;
|
private List<Boat> boats;
|
||||||
private Simulator raceSimulator;
|
private Simulator raceSimulator;
|
||||||
|
|
||||||
@@ -30,6 +32,11 @@ public class ServerThread implements Runnable, Observer {
|
|||||||
serverLog("Spawning Server", 0);
|
serverLog("Spawning Server", 0);
|
||||||
raceSimulator = new Simulator(BOAT_LOCATION_PERIOD);
|
raceSimulator = new Simulator(BOAT_LOCATION_PERIOD);
|
||||||
boats = raceSimulator.getBoats();
|
boats = raceSimulator.getBoats();
|
||||||
|
|
||||||
|
for (Boat b : boats){
|
||||||
|
boatsFinished.put(b.getSourceID(), false);
|
||||||
|
}
|
||||||
|
|
||||||
runner.start();
|
runner.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,21 +78,38 @@ public class ServerThread implements Runnable, Observer {
|
|||||||
List<BoatSubMessage> boatSubMessages = new ArrayList<BoatSubMessage>();
|
List<BoatSubMessage> boatSubMessages = new ArrayList<BoatSubMessage>();
|
||||||
BoatStatus boatStatus;
|
BoatStatus boatStatus;
|
||||||
RaceStatus raceStatus;
|
RaceStatus raceStatus;
|
||||||
|
boolean thereAreBoatsNotFinished = false;
|
||||||
|
|
||||||
if (raceStarted){
|
|
||||||
boatStatus = BoatStatus.RACING;
|
|
||||||
raceStatus = RaceStatus.STARTED;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
boatStatus = BoatStatus.PRESTART;
|
|
||||||
raceStatus = RaceStatus.PRESTART;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Boat b : boats){
|
for (Boat b : boats){
|
||||||
|
if (raceStarted){
|
||||||
|
boatStatus = BoatStatus.RACING;
|
||||||
|
thereAreBoatsNotFinished = true;
|
||||||
|
}
|
||||||
|
else if(boatsFinished.get(b.getSourceID())){
|
||||||
|
boatStatus = BoatStatus.FINISHED;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
boatStatus = BoatStatus.PRESTART;
|
||||||
|
thereAreBoatsNotFinished = true;
|
||||||
|
}
|
||||||
|
|
||||||
BoatSubMessage m = new BoatSubMessage(b.getSourceID(), boatStatus, b.getLastPassedCorner().getSeqID(), 0, 0, 0, 0);
|
BoatSubMessage m = new BoatSubMessage(b.getSourceID(), boatStatus, b.getLastPassedCorner().getSeqID(), 0, 0, 0, 0);
|
||||||
boatSubMessages.add(m);
|
boatSubMessages.add(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (thereAreBoatsNotFinished){
|
||||||
|
if (raceStarted){
|
||||||
|
raceStatus = RaceStatus.STARTED;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
raceStatus = RaceStatus.PRESTART;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
raceStatus = RaceStatus.NOTACTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
return new RaceStatusMessage(1, raceStatus, startTime, WindDirection.EAST,
|
return new RaceStatusMessage(1, raceStatus, startTime, WindDirection.EAST,
|
||||||
100, boats.size(), RaceType.MATCH_RACE, 1, boatSubMessages);
|
100, boats.size(), RaceType.MATCH_RACE, 1, boatSubMessages);
|
||||||
}
|
}
|
||||||
@@ -223,14 +247,19 @@ public class ServerThread implements Runnable, Observer {
|
|||||||
|
|
||||||
for (Boat b : ((Simulator) o).getBoats()){
|
for (Boat b : ((Simulator) o).getBoats()){
|
||||||
try {
|
try {
|
||||||
|
|
||||||
Message m = new BoatLocationMessage(b.getSourceID(), 1, b.getLat(),
|
Message m = new BoatLocationMessage(b.getSourceID(), 1, b.getLat(),
|
||||||
b.getLng(), b.getHeadingCorner().getBearingToNextCorner(),
|
b.getLng(), b.getHeadingCorner().getBearingToNextCorner(),
|
||||||
((long) b.getSpeed()));
|
((long) b.getSpeed()));
|
||||||
|
|
||||||
server.send(m);
|
server.send(m);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
serverLog("Couldn't send a boat status message", 1);
|
serverLog("Couldn't send a boat status message", 1);
|
||||||
}
|
}
|
||||||
|
catch (NullPointerException e){
|
||||||
|
//raceFinished = true;
|
||||||
|
serverLog("Boat " + b.getSourceID() + " finished the race", 1);
|
||||||
|
boatsFinished.put(b.getSourceID(), true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user