A State-Based Programming Model for Wireless Sensor Networks
A State-Based Programming Model for Wireless Sensor Networks
A State-Based Programming Model for Wireless Sensor Networks
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
178 Appendix B. Implementations of the EnviroTrack Group Management<br />
276 if( RxBuffer->type == RECRUIT ) {<br />
277 op17();<br />
278 _GMStatus.status = MEMBER;<br />
279 _generalTimer = wait_receive();<br />
280 } else if( RxBuffer->type == CANDIDATE ) {<br />
281 if( /* [...] */ ) {<br />
282 op18();<br />
283 _GMStatus.status = MEMBER;<br />
284 _generalTimer = wait_receive();<br />
285 }<br />
286 }<br />
287 break;<br />
288 } // end case NEWCANDIDATE<br />
289<br />
290 case LEADERCANDIDATE: {<br />
291 if( RxBuffer->type == RECRUIT ) {<br />
292 if( /* [...] */ ) {<br />
293 op19();<br />
294 _GMStatus.status = MEMBER;<br />
295 _generalTimer = wait_receive();<br />
296 }<br />
297 } else if( RxBuffer->type == CANDIDATE ) {<br />
298 if( /* [...] */ ) {<br />
299 op20();<br />
300 _GMStatus.status = MEMBER;<br />
301 _generalTimer = wait_receive();<br />
302 }<br />
303 }<br />
304 break;<br />
305 } // end case LEADERCANDIDATE<br />
306<br />
307 case LEADER: {<br />
308 if( RxBuffer->type == RECRUIT ) {<br />
309 if( /* [...] */ ) {<br />
310 if( /* [...] */ ) {<br />
311 op21();<br />
312 _GMStatus.status = MEMBER;<br />
313 _generalTimer = wait_receive();<br />
314 } else {<br />
315 GMSend( /* [...] */, RECRUIT );<br />
316 op22();<br />
317 _generalTimer = wait_recruit();<br />
232 op11();<br />
233 }<br />
234<br />
235 /* --------------------------------------------------------- *<br />
236 * TASKS<br />
237 * --------------------------------------------------------- */<br />
238 task void ProcessRecuritMessage() {<br />
239 GMPacket* RxBuffer;<br />
240 op12();<br />
241<br />
242 switch( _GMStatus.status ) {<br />
243<br />
244 case FREE: {<br />
245 if( (RxBuffer->type == RECRUIT) || (RxBuffer->type == RESIGN) ) {<br />
246 op13();<br />
247 _GMStatus.status = FOLLOWER;<br />
248 _generalTimer = wait_threshold();<br />
249 }<br />
250 break;<br />
251 } // end case FREE<br />
252<br />
253 case FOLLOWER: {<br />
254 if( (RxBuffer->type == RECRUIT) || (RxBuffer->type == RESIGN) ) {<br />
255 op14();<br />
256 _generalTimer = wait_threshold();<br />
257 }<br />
258 break;<br />
259 } // end case FOLLOWER<br />
260<br />
261 case MEMBER: {<br />
262 if( RxBuffer->type == RECRUIT ) {<br />
263 op15();<br />
264 _generalTimer = wait_receive();<br />
265 } else if( RxBuffer->type == RESIGN ) {<br />
266 if( /* [...] */ ) {<br />
267 op16();<br />
268 _GMStatus.status = LEADERCANDIDATE;<br />
269 _generalTimer = wait_random();<br />
318 }<br />
319 }<br />
270 }<br />
271 }<br />
272 break;<br />
273 } // end case MEMBER<br />
274<br />
275 case NEWCANDIDATE: {