21.08.2013 Views

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

SHOW MORE
SHOW LESS

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: {

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!