public class RainForecastNetwork extends LogicalSensorNetwork{ |
private Source rain; |
private LowpassFilter lpf; |
private Average ave; |
private Direction dir; |
public RainForecastNetwork() throws Exception { |
super(“conf/rain_forecast.lsn”); |
} |
@Override |
public boolean onInit() { |
rain = new Source; //Logical Sensors |
lpf = new LowpassFilter; //Lowpass Filters |
ave = new Average; //Average Aggregators |
dir = new Direction(“Direction”, new TimerTrigger(10000)); |
//Instantiating Processor Nodes |
for(int i=0; i<2; i++){ |
rain[i] = manager.getNodes(“RainA” + (i+1)); |
lpf[i] = new LowpassFilter[rain[i].length]; |
for(int j=0; j<lpf[i].length; j++) |
lpf[i][j] = new LowpassFilter(“LPF”+i+j, new |
21 FlowTrigger()); |
22 ave[i] = new Average(“Ave” + i, new RendezvousTrigger()); |
23 } |
24 //Connecting Processor Nodes |
25 for(int i=0; i<2; i++){ |
26 for(int j=0; j<rain[i].length; j++){ |
27 rain[i][j].setPushStream(“value”, lpf[i][j]); |
28 lpf[i][j].setPushStream(“value”, ave[i]); |
29 } |
30 ave[i].setPullStream(“value”, dir); |
31 } |
32 dir.setPushStream(“value”, sink); |
33 return true; |
34 } |
35 @Override |
36 public boolean onUpdate() { |
37 //Disconnect Processor Nodes |
38 for(int i=0; i<2; i++){ |
39 for(int j=0; j<lpf[i].length; j++){ |
40 lpf[i][j].removeStream(ave[i]); |
41 } |
42 } |
43 //Get new binding and instantiate new LowpassFilters |
44 for(int i=0; i<2; i++){ |
45 rain[i] = manager.getNodes(“RainA” + (i+1)); |
46 lpf[i] = new LowpassFilter[rain[i].length]; |
47 for(int j=0; j<lpf[i].length; j++) |
lpf[i][j] = new LowpassFilter(“LPF“+i+j, new |
FlowTrigger; |
} |
//Connect new LowpassFilters to Averages |
for(int i=0; i<2; i++){ |
for(int j=0; j<rain[i].length; j++){ |
54 rain[i][j].setPushStream(“value”, lpf[i][j]); |
55 lpf[i][j].setPushStream((“value”, ave[i]); |
} |
57 } |
58 return true; |
59 } |
} |