######################################## # # BARRIER-RELATED FUNCTIONS # ######################################## # # Constants # BARRIER_TIMEOUT = 1200 # in steps BARRIER_VSTIG = 80 timeW = 0 barrier = nil # # Sets a barrier # function barrier_create() { # reset timeW = 0 # create barrier vstig #log("---> Prev. br. ", barrier, " ", BARRIER_VSTIG) if(barrier!=nil) { barrier=nil BARRIER_VSTIG = BARRIER_VSTIG +1 } #log("---> New. br. ", barrier, " ", BARRIER_VSTIG) barrier = stigmergy.create(BARRIER_VSTIG) } function barrier_set(threshold, transf, resumef, bdt) { statef = function() { barrier_wait(threshold, transf, resumef, bdt); } UAVSTATE = "BARRIERWAIT" barrier_create() } # # Make yourself ready # function barrier_ready() { #log("BARRIER READY -------") barrier.put(id, 1) barrier.put("d", 0) } # # Executes the barrier # function barrier_wait(threshold, transf, resumef, bdt) { barrier.put(id, 1) barrier.get(id) #log("--->BS: ", barrier.size(), " (", BARRIER_VSTIG, ")") if(barrier.size() - 1 >= threshold or barrier.get("d") == 1) { barrier.put("d", 1) timeW = 0 transf() } else if(timeW >= BARRIER_TIMEOUT) { log("------> Barrier Timeout !!!!") barrier=nil timeW = 0 resumef() } if(bdt!=-1) neighbors.broadcast("cmd", bdt) timeW = timeW+1 } # get the lowest id of the fleet, but requires too much bandwidth... function getlowest(){ Lid = 15; u=15 while(u>=0){ tab = barrier.get(u) if(tab!=nil){ if(tab LOWEST ID:",Lid) }