added am10 inbox/outbox support
[fleet.git] / src / edu / berkeley / fleet / ships / FetchShip.java
1 package edu.berkeley.fleet.ships;
2 import edu.berkeley.fleet.*;
3
4 import java.util.*;
5 import java.io.*;
6
7 public class FetchShip extends Ship {
8
9     InboxPort    codebag = new InboxPort(this,  "codebag");
10     TokenInPort  release = new TokenInPort(this, "release");
11     TokenInPort  revoke  = new TokenInPort(this, "revoke");
12     TokenOutPort done    = new TokenOutPort(this, "done");
13
14     public FetchShip(Fleet fleet, String name) {
15         super(fleet, name);
16     }
17
18     public void service() {
19         if (codebag.empty()) return;
20         if (release.empty() && revoke.empty()) return;
21         if (!done.empty()) return;
22         int cbd = codebag.remove();
23
24         CodeBag cb = CodeBag.getCodeBagByDescriptor(cbd);
25         if (!revoke.empty()) {
26             revoke.remove();
27             Log.print("revoking codebag: " + cb);
28         } else {
29             release.remove();
30             if (cb==null)
31                 throw new RuntimeException("bogus codebag -- this should not happen");
32             cb.dispatch(getFleet());
33         }
34
35         done.addToken();
36     }
37
38 }