updated to AM14, AM15
[fleet.git] / src / edu / berkeley / fleet / ships / FetchShip.java
1 package edu.berkeley.fleet.ships;
2 import edu.berkeley.fleet.interpreter.*;
3 import edu.berkeley.fleet.*;
4
5 import java.util.*;
6 import java.io.*;
7
8 public class FetchShip extends InterpreterShip {
9
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");
14
15     public FetchShip(Interpreter fleet, String name) {
16         super(fleet, name);
17     }
18
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();
24
25         CodeBag cb = CodeBag.getCodeBagByDescriptor(cbd);
26         if (revoke.tokenReadyForShip()) {
27             revoke.removeTokenForShip();
28             Log.print("revoking codebag: " + cb + "\n");
29         } else {
30             release.removeTokenForShip();
31             if (cb==null)
32                 throw new RuntimeException("bogus codebag -- this should not happen");
33             cb.dispatch(getInterpreter());
34         }
35
36         done.addTokenFromShip();
37     }
38
39 }