Skip to content
This repository was archived by the owner on Nov 30, 2021. It is now read-only.
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);
}
Clone this wiki locally