This repository was archived by the owner on Nov 30, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Bus
Matthew Pohlmann edited this page Jan 1, 2014
·
1 revision
###Data
class MyPassenger{State s, Passenger p}
enum State {None,Sitting,Leaving,InformedArrived}
List<MyPassenger> passengers;
Route route;
class Route {List<BusStop> stops, public BusStop getNextStop()};
public List<Passenger> queriedList;
public List<Passenger> justAdded;###Messages
public void msgLeaving(Passenger p)
{
passengers.find(p).s = Leaving;
stateChanged();
}
public void msgStaying(Passenger p)
{
passengers.find(p).s = Sitting;
stateChanged();
}
public void msgDoneBoarding(Passenger p)
{
queriedList.remove(p);
justAdded.add(p);
passengers.add(new MyPassenger(p));
stateChanged();
}
public void msgNotBoarding(Passenger p)
{
queriedList.remove(p);
stateChanged();
}###Scheduler
@Override
protected boolean pickAndExecuteAnAction()
{
if there exists some MyPassenger p in passengers such that
p.s = Leaving
passengers.remove(p);
if there exists some MyPassenger p in passengers such that
p.s = InformedArrived
//end
if !queriedList.isEmpty()
//end
goToNextStop();
}###Actions
private void goToNextStop()
{
BusStop s = route.getNextStop();
msgSetDestination (s);
doGoToDestination();
for each MyPassenger pass in passengers
pass.s = InformedArrived
pass.p.msgArrived(s);
List<Passenger> newPassengers = s.getPassengerList();
for each Passenger pass in newPassengers
queriedList.add(pass);
pass.msgPleaseBoard(this);
}