示例#1
0
 def poiCriticoTimeout(self, poi):
     if ACTIVATE_LOG is not None and ACTIVATE_LOG is True:
         poiKey = convertTupleToString(poi)
         self.poiCriticoTimers[convertTupleToString(poi)] = time.time()
         self.poiCriticoTotalTimersActivados += 1
         if poiKey not in self.poiCriticoTiempoAtencion:
             self.poiCriticoTiempoAtencion[poiKey] = []
示例#2
0
    def execute(self):
        client1 = client()
        timer = Timer(SYNC_WAIT, self.wakeUp)
        timer.start()
        self.syncLock.acquire()
        client1.search_friends(self.bebop.ip)
        if not self.awoken:
            message = createMessage(INICIO, SYNC, 'wake up!')
            client1.send_message(message)
        for i in range(len(POI_POSITIONS)):
            new_timer = Timer(POI_TIMERS[i], self.setTimerFunc, (POI_POSITIONS[i],))
            new_timer.start()
            self.poiVigilarTimeoutDict[convertTupleToString(POI_POSITIONS[i])] = new_timer

        return client1
 def execute(self):
     result = []
     for key in self.poisVigilar:
         if convertTupleToString(key) in self.assignedPOIs and self.client.check_connection(self.assignedPOIs[convertTupleToString(key)]["ip"]) == 0:
             self.client.send_message(createMessage(ASIGNAR_POI, MISSION_OK, key))
             self.poisVigilar.remove(key)
             timer2 = threading.Timer(TIME_BETWEEN_POI_PING, self.checkMissionStatus, (key,))
             timer2.start()
         else:
             self.nextState = ASIGNAR_POI
             result.append(key)
     for key in self.poisCritico:
         if convertTupleToString(key) in self.assignedPOIs and self.client.check_connection(self.assignedPOIs[convertTupleToString(key)]["ip"]) == 0:
             self.client.send_message(createMessage(ASIGNAR_POI, MISSION_OK, key))
             self.poisCritico.remove(key)
             timer2 = threading.Timer(TIME_BETWEEN_POI_PING, self.checkMissionStatus, (key,))
             timer2.start()
         else:
             self.nextState = ASIGNAR_POI
             result.append(key)
     minPoi = getClosestPOI(self.bebop.current_position, result)
     if minPoi is None:
         return None
     return {"poi": minPoi, "type": POI_CRITICO}
示例#4
0
 def execute(self):
     if not self.timeout:
         if len(self.client.check_friends()) != 0:
             self.client.send_message(
                 createMessage(
                     GENERAL, UPDATE_MAP,
                     utils.convertTupleToString(
                         self.bebop.current_position)))
         elif not self.isAlone:
             self.nextState = DESPLAZARSE_SIN_CONEXION
             return self.client
         if self.bebop.poi_position is not None:
             if self.bebop.poi_position in self.poisCritico:
                 self.nextState = POI_CRITICO
             else:
                 self.nextState = POI_VIGILAR
             return self.bebop.poi_position
         isChequearMisionResult = self.isChequearMision()
         if isChequearMisionResult is not None:
             return isChequearMisionResult
         else:
             return self.isAsignarPOI()
     return None
 def execute(self):
     current_position = self.bebop.current_position
     nextState = self.dataBuffer
     if (self.bebop.poi_position == current_position):
         self.bebop.poi_position = None
         poiKey = convertTupleToString(current_position)
         if (poiKey in self.poiVigilarTimeoutDict):
             executionTimer = self.poiVigilarTimeoutDict[poiKey]
             executionTimer.cancel()
             executionTimerNew = Timer(
                 POI_TIMERS[POI_POSITIONS.index(current_position)],
                 self.poiVigilarTimeout, (current_position, ))
             executionTimerNew.start()
             self.poiVigilarTimeoutDict[poiKey] = executionTimerNew
             self.logStats.poiExplorado(poiKey)
         if current_position in self.poisVigilar:
             self.poisVigilar.remove(current_position)
         if current_position in self.poisCriticos:
             self.poisCriticos.remove(current_position)
         if poiKey in self.assignedPOIs:
             del (self.assignedPOIs[poiKey])
         nextState = EXPLORAR
     self.bebop.updateSearchMap(self.bebop.current_position)
     return nextState
def main(drone1):
    drone1 = drone.drone((0, 0))
    my_ip = connections.get_server_ip()

    client_handler = threading.Thread(target=connections.run_server,
                                      args=(
                                          my_ip,
                                          drone1,
                                      ))
    client_handler.start()
    client1 = client.client()
    client1.search_friends(my_ip)

    print('take_off', drone1)
    drone1.take_off()

    #result2= (23,31)
    #drone2.updateSearchMap(result)
    #drone1.updateSearchMap(result2)
    for i in range(4000):
        new_position = drone1.explore()
        drone1.move(new_position)
        message = utils.convertTupleToString(drone1.current_position)
        client1.send_message(message)

        #drone2.updateSearchMap(result)
        #result2 = drone2.explorar(result2)
        #drone1.updateSearchMap(result2)
        if i == 200:
            drone1.battery_status = LOW
            print("es low")
        if i == 230:
            print("es critical")
            drone1.goHome()
        if drone1.current_position == drone1.home:
            drone1.battery_status = NORMAL
 def execute(self):
     self.bebop.updateSearchMap(self.bebop.current_position)
     self.client.send_message(createMessage(GENERAL, UPDATE_MAP, utils.convertTupleToString(self.bebop.current_position)))
     return None
示例#8
0
    def execute(self):
        if self.isAlone:
            self.result = self.poiType
            self.bebop.poi_position = self.poi
            self.assignedPOIs[self.poi] = self.bebop.ip
        else:
            if len(self.poiAlreadyAssigned
                   ) > 0 and self.previousState == CANCELAR_MISION:
                return None

            if len(self.availableDistances) > 0 or len(
                    self.availableResults) > 0:
                # im late to the party
                return None

            connected_drones = self.client.check_friends()
            distance = cartesianDistance(self.poi, self.bebop.current_position)
            available_battery = self.bebop.getBatteryPercentage()
            ipPort = dict({"ip": self.bebop.ip, "port": self.bebop.port})
            if available_battery - (distance /
                                    DISTANCE_ENERGY_RATIO) > LOW_BATTERY:
                message = createMessage(ASIGNAR_POI, AVAILABLE, ipPort)
                self.availableDrones.append(ipPort)
                for ipPort in connected_drones:
                    # antes estaba send_message
                    self.client.send_direct_message(message, ipPort["ip"],
                                                    ipPort["port"])
            else:
                message = createMessage(
                    ASIGNAR_POI, UNAVAILABLE,
                    concatIpPort(self.bebop.ip, self.bebop.port))
                for ipPort in connected_drones:
                    # antes estaba send_message
                    self.client.send_direct_message(message, ipPort["ip"],
                                                    ipPort["port"])
                return None

            timer1 = threading.Timer(WAIT_TIME, self.messageWaitTimeout)
            timer1.start()

            conditionMet = False
            while not conditionMet and not self.timeout:
                self.messageWait.acquire()
                if self.blockHandleMessage.locked():
                    self.blockHandleMessage.release()
                self.messageMutex.acquire()
                conditionMet = len(self.availableDrones) + len(
                    self.unavailableDrones) - 1 >= len(connected_drones)
                self.messageMutex.release()

            self.timeout = False
            timer1.cancel()
            availableDronesNumber = len(self.availableDrones)
            distanceDict = dict({
                "distance": distance,
                "ip": self.bebop.ip,
                "port": self.bebop.port
            })
            message2 = createMessage(ASIGNAR_POI, DISTANCE, distanceDict)
            self.messageMutex.acquire()
            # for ip in self.availableDrones:
            #     if ip != self.bebop.ip:
            self.client.send_message(message2)
            self.messageMutex.release()
            timer2 = threading.Timer(SYNC_ASIGNARPOI_MSG,
                                     self.messageWaitTimeout)
            timer2.start()
            conditionMet = False
            self.availableDistances.append(distanceDict)
            while not conditionMet and not self.timeout:
                self.messageWait.acquire()
                if self.blockHandleMessage.locked():
                    self.blockHandleMessage.release()
                self.messageMutex.acquire()
                conditionMet = len(
                    self.availableDistances) >= availableDronesNumber
                self.messageMutex.release()
            self.timeout = False
            timer2.cancel()
            minDistance = distance
            minIp = self.bebop.ip
            minPort = self.bebop.port

            self.messageMutex.acquire()
            minimoEncontrado = dict({"ip": minIp, "port": minPort})
            for elem in self.availableDistances:
                if elem["distance"] < minDistance:
                    minDistance = elem["distance"]
                    minIp = elem["ip"]
                    minPort = elem["port"]
                elif elem["distance"] == minDistance:
                    if self.isLower(elem, minimoEncontrado):
                        minDistance = elem["distance"]
                        minIp = elem["ip"]
                        minPort = elem["port"]
                        minimoEncontrado = dict({"ip": minIp, "port": minPort})
            # minimoEncontrado = dict({"ip": minIp, "port": minPort})
            message3 = createMessage(ASIGNAR_POI, RESULT, minimoEncontrado)
            for ipPort in self.availableDrones:
                if ipPort["ip"] != self.bebop.ip or ipPort[
                        "port"] != self.bebop.port:
                    self.client.send_direct_message(message3, ipPort["ip"],
                                                    ipPort["port"])
            self.messageMutex.release()
            timer3 = threading.Timer(SYNC_ASIGNARPOI_MSG,
                                     self.messageWaitTimeout)
            timer3.start()
            conditionMet = False
            self.availableResults.append(minimoEncontrado)
            while not conditionMet and not self.timeout:
                self.messageWait.acquire()
                if self.blockHandleMessage.locked():
                    self.blockHandleMessage.release()
                self.messageMutex.acquire()
                conditionMet = len(self.availableResults) >= len(
                    self.availableDrones)
                self.messageMutex.release()
            self.timeout = False
            timer3.cancel()

            concensus = ''
            concensusValue = 0
            self.messageMutex.acquire()
            for ipPort in self.availableDrones:
                count = 0
                for elem in self.availableResults:
                    if elem == ipPort["ip"]:
                        count += 1
                if count > concensusValue:
                    concensusValue = count
                    concensus = ipPort
                elif count == concensusValue:
                    if self.isLower(ipPort, concensus):
                        concensusValue = count
                        concensus = ipPort
            self.messageMutex.release()
            if concensus["ip"] == self.bebop.ip and concensus[
                    "port"] == self.bebop.port:
                self.result = self.poiType
                self.bebop.poi_position = self.poi
                message4 = createMessage(GENERAL, POI_ASSIGNED,
                                         convertTupleToString(self.poi))
                self.client.send_message(message4)
            timer2 = threading.Timer(TIME_BETWEEN_POI_PING,
                                     self.checkMissionStatus, (self.poi, ))
            timer2.start()
            self.assignedPOIs[convertTupleToString(self.poi)] = concensus
        return self.poi
示例#9
0
 def checkMissionStatus(self, poi):
     if (convertTupleToString(poi) in self.assignedPOIs):
         self.poisVigilar.append(poi)