/* Copyright 1999 Arizona Board of regents on behalf of * The University of Arizona * All Rights Reserved * (USE & RESTRICTION - Please read COPYRIGHT file) * * Version : DEVSJAVA2.6 * Date : 04-15-00 */ package SimpArc; import java.util.Random; import simView.*; import java.lang.*; import genDevs.modeling.*; import genDevs.simulation.*; import GenCol.*; public class genWActivity extends ViewableAtomic{ protected double interArrivalTime; protected int count; protected activity currentActivity; protected Random rand; public genWActivity() {this("genWActivity", 2);} public genWActivity(String name,double interArrivalTime){ super(name); // addInport("in"); addOutport("out"); addInport("stop"); addInport("start"); this.interArrivalTime = interArrivalTime ; addTestInput("start",new entity("")); addTestInput("stop",new entity("")); } public void initialize(){ holdIn("active",interArrivalTime); count = 0; rand = new Random(3544596); super.initialize(); } public void deltext(double e,message x) { Continue(e); if (phaseIs("active")&& somethingOnPort(x,"outputFromActivity")){ System.out.println(x.getValOnPort("outputFromActivity",0)); System.exit(3); } //holdIn("active",interArrivalTime); if (phaseIs("passive")&& somethingOnPort(x,"start")) holdIn("active",interArrivalTime); if (phaseIs("active")&& somethingOnPort(x,"stop")) phase = "finishing"; } public void deltint( ) { if(phaseIs("active")){ if (count>0) System.out.println(count+" Activity did not complete in time"); //holdIn("active",interArrivalTime); if (currentActivity!=null)currentActivity.kill(); count = count +1; currentActivity = new trialActivity(count,rand.nextDouble()); holdIn("active",interArrivalTime,currentActivity); } else passivate(); } public message out( ) { return outputNameOnPort("job" + name+count,"out"); } public void showState(){ super.showState(); System.out.println("int_arr_t: " + interArrivalTime); } public String getTooltipText(){ return super.getTooltipText() +"\n"+" interArrivalTime: " + interArrivalTime +"\n"+" count: " + count; } public static void main(String[] args){ genWActivity gen = new genWActivity(); digraph dum = new digraph("dum"); dum.add(gen); genDevs.simulation.realTime.RTcoordinator r = new genDevs.simulation.realTime.RTcoordinator(dum); r.initialize(); r.simulate(2,20000.0);//no effect of iter, observe is in milli } } class trialActivity extends activity{ int count; public trialActivity(int count, double completionTime){ super("trialActivity",15*completionTime); System.out.println("actual completionTime = "+processingTime); this.count=count; } public void returnTheResult(entity myresult) { System.out.println("return result in Activity"); sim.returnResultFromActivity(myresult); } public entity computeResult(){ return new entity(getName() + " --NEW activity result = "+count); } public void run(){ try { sleep((long)getProcessingTime()*1000); } catch (InterruptedException e) {return;} returnTheResult(computeResult()); } }