package workfarm; import java.applet.*; import java.awt.*; import java.awt.event.*; import eduni.simanim.*; import eduni.simjava.*; import eduni.simdiag.*; // // The worker public class Worker extends Sim_entity { private Sim_port in, out; private int state; private Sim_normal_obj delay; private static final int IDLE = 0; private static final int BUSY = 1; public Worker(String name, double hold, int x, int y) { super(name, "worker", x, y); in = new Sim_port("in", "port", Anim_port.TOP, 10); add_port(in); out = new Sim_port("out", "port", Anim_port.BOTTOM, 10); add_port(out); state = IDLE; String[] wstate = {"idle","busy"}; add_param(new Anim_param( "State", Anim_param.STATE, new Param_type("wstate", wstate) )); delay = new Sim_normal_obj("", hold,hold/10.0, (int)System.currentTimeMillis()); } public void body() { Sim_event ev = new Sim_event(); double h; dump_state(); while(true) { sim_wait(ev); sim_hold(0.01); state = BUSY; dump_state(); h = delay.sample(); sim_hold(h>0?h:0.01); // Chuga Chuga Chuga state = IDLE; dump_state(); sim_hold(0.01); sim_schedule(out, 0.0, 0); if(Applet5.show_msg) sim_trace(1, "S out R"); // Send on result sim_schedule(in, 0.0, 0); if(Applet5.show_msg) sim_trace(1, "S in F"); // Tell router we want more } } public void dump_state() { if(state == IDLE) sim_trace(1, "P idle"); if(state == BUSY) sim_trace(1, "P busy"); } }