1 package edu.berkeley.fleet.ships;
2 import edu.berkeley.fleet.interpreter.*;
3 import edu.berkeley.fleet.*;
8 public class FetchShip extends InterpreterShip {
10 DataInbox codebag = new DataInbox(this, "codebag");
11 TokenInbox release = new TokenInbox(this, "release");
12 TokenInbox revoke = new TokenInbox(this, "revoke");
13 TokenOutbox done = new TokenOutbox(this, "done");
15 public FetchShip(Interpreter fleet, String name) {
19 public void service() {
20 if (!codebag.dataReadyForShip()) return;
21 if (!release.tokenReadyForShip() && !revoke.tokenReadyForShip()) return;
22 if (!done.readyForTokenFromShip()) return;
23 int cbd = codebag.removeDataForShip();
25 CodeBag cb = CodeBag.getCodeBagByDescriptor(cbd);
26 if (revoke.tokenReadyForShip()) {
27 revoke.removeTokenForShip();
28 Log.print("revoking codebag: " + cb + "\n");
30 release.removeTokenForShip();
32 throw new RuntimeException("bogus codebag -- this should not happen");
33 cb.dispatch(getInterpreter());
36 done.addTokenFromShip();