Exemple #1
0
def test_match_false_body():
    template = Template()
    template.body = "Hello World"

    message = Message()

    assert not template.match(message)

    message.body = "Bye Bye Love"

    assert not template.match(message)
Exemple #2
0
        async def run(self):
            print("InformBehav running")
            msg = Message(to=self.agent.recv_jid)  # Instantiate the message
            msg.set_metadata("performative", "inform")  # Set the "inform" FIPA performative
            msg.body = "Hello World {}".format(self.agent.recv_jid)  # Set the message content

            await self.send(msg)
            print("Message sent!")

            # stop agent from behaviour
            await self.agent.stop()
Exemple #3
0
def test_behaviour_match_without_template():
    class TestBehaviour(OneShotBehaviour):
        async def run(self):
            pass

    behaviour = TestBehaviour()

    msg = Message()
    msg.sender = "sender1@host"
    msg.to = "recv1@host"
    msg.body = "Hello World"
    msg.thread = "thread-id"
    msg.set_metadata("performative", "query")

    assert behaviour.match(msg)
Exemple #4
0
def test_match():
    template = Template()
    template.sender = "sender1@host"
    template.to = "recv1@host"
    template.body = "Hello World"
    template.thread = "thread-id"
    template.metadata = {"performative": "query"}

    message = Message()
    message.sender = "sender1@host"
    message.to = "recv1@host"
    message.body = "Hello World"
    message.thread = "thread-id"
    message.set_metadata("performative", "query")

    assert template.match(message)
Exemple #5
0
        async def run(self):

            if self.agent.has_message:
                print(
                    f"SenderAgent: running at {datetime.datetime.now().time()}: {self.counter}"
                )

                msg = Message(
                    to=self.agent.recv_jid)  # Instantiate the message

                msg.set_metadata(
                    "performative",
                    "inform")  # Set the "inform" FIPA performative
                msg.body = str(f"{self.agent.message_to_send}")

                await self.send(msg)

                print("SenderAgent: Message sent!")

                self.counter += 1

                msg = await self.receive(timeout=10)

                if msg:
                    print("SenderAgent: Response Message received: {}".format(
                        msg.body))
                    if self.agent.to_send:
                        self.agent.response_classification_message = msg.body
                    else:
                        self.agent.response_extraction_message = msg.body
                else:
                    print(
                        "SenderAgent: Did not received any response message after 10 seconds"
                    )

                self.agent.has_message = False
        async def run(self):
            ##################  recive the value from the RandomWlaker   ##################
            #print("RecvBehav running [  CarefulAgent  ]")
            msg = await self.receive(timeout=20)
            # we use str() to convert the type of msg.sender
            if msg and str(msg.sender) == self.randomWalker:
                value = int(msg.body)
                print("CarefulAgent : c'est trop :" + str(value))
                random_value = random.randint(0, value)
                print("CarefulAgent : je vais vous donner :" +
                      str(random_value) + "\n")
                ####### sent the value ################
                msg = Message(to=self.randomWalker)  # Instantiate the message
                msg.set_metadata(
                    "performative",
                    "inform")  # Set the "inform" FIPA performative
                msg.body = str(random_value)  # Set the message content
                await asyncio.sleep(10)  # wait 10 seconds
                await self.send(msg)

            else:
                print(
                    "Did not received any message after 20 seconds [[ Message from agent CarefulAgent ]]"
                )
Exemple #7
0
            async def run(self):
                msg = Message()
                msg.set_metadata('performative', 'sight')
                msg.to = self.agent.name
                msg.body = "NAME: " + self.agent.name
                self.send(msg)
                msgSight = await self.receive(10000)
                if not msgSight:
                    self.agent.m_AimedAgent = None
                    return

                sContent = msgSight.body

                tokens = sContent.split()
                iNumOfObjects = int(tokens[1])

                self.agent.m_FOVObjects = []

                if iNumOfObjects <= 0:
                    self.agent.m_AimedAgent = None
                    return

                tokens = tokens[2:]

                for i in range(iNumOfObjects):
                    s = CSight()
                    s.m_id = i
                    s.m_eTeam = int(tokens[1])
                    s.m_eType = int(tokens[3])
                    s.m_dAngle = float(tokens[5])
                    s.m_dDistance = float(tokens[7])
                    s.m_iHealth = int(tokens[9])
                    s.m_Position.x = float(tokens[11])
                    s.m_Position.y = float(tokens[13])
                    s.m_Position.z = float(tokens[15])
                    self.agent.m_FOVObjects.append(s)
 def prepare_power_data_response(self, power, receivers):
     msg = Message(to=receivers)
     msg.set_metadata('performative', 'inform')
     msg.set_metadata('type', 'power_data')
     msg.body = json.dumps({'power': power})
     return msg
 async def late_confirm(self, behav, confirmed, receiver):
     late_confirm = Message(to=receiver)
     late_confirm.set_metadata('performative', 'inform')
     late_confirm.set_metadata('type', 'move_meeting_inform')
     late_confirm.body = json.dumps({"confirmed": confirmed})
     await behav.send(late_confirm)
        async def run(self):
            def check(x):
                if x[1] is None:
                    return float('Inf')
                else:
                    return x[1]

            meeting_impossible = True
            for key, meeting_scr in self.agent.meetings_info[
                    self.meeting_guid]["scores"].items():
                if meeting_scr is not None:
                    meeting_impossible = False

            meeting = self.agent.meetings_info[self.meeting_guid]

            if meeting_impossible:
                organizer_response = Message(to=meeting["organizer_jid"])
                organizer_response.set_metadata('performative', 'refuse')
                organizer_response.set_metadata('type', 'meet_refuse')
                organizer_response.body = json.dumps({
                    'meeting_guid':
                    self.meeting_guid,
                    'start_date':
                    time_to_str(meeting['start_date']),
                    'end_date':
                    time_to_str(meeting['end_date']),
                    'room_id':
                    meeting['room_id'],
                    'temperature':
                    meeting['temperature']
                })
                await self.send(organizer_response)
                self.agent.processing_meeting = False
                return

            room_date = min(
                self.agent.meetings_info[self.meeting_guid]["scores"].items(),
                key=check)

            if not runtime_switches.is_best_room_selected_for_meeting:
                for key, meeting_scr in self.agent.meetings_info[
                        self.meeting_guid]["scores"].items():
                    if meeting_scr is not None:
                        room_date = [key, meeting_scr]

            self.agent.meetings_info[
                self.meeting_guid]["room_id"] = room_date[0]

            for receiver in meeting.get('participants'):
                response = Message()
                response.set_metadata('performative', 'inform')
                response.set_metadata('type', 'new_meeting_inform')
                response.body = json.dumps({
                    'meeting_guid':
                    self.meeting_guid,
                    'organizer_jid':
                    meeting["organizer_jid"],
                    'start_date':
                    time_to_str(meeting['start_date']),
                    'end_date':
                    time_to_str(meeting['end_date']),
                    'room_id':
                    meeting['room_id'],
                    'temperature':
                    meeting['temperature']
                })
                response.to = receiver
                await self.send(response)

            response = Message()
            response.set_metadata('performative', 'inform')
            response.set_metadata('type', 'new_meeting_inform')
            response.body = json.dumps({
                'meeting_guid':
                self.meeting_guid,
                'organizer_jid':
                meeting["organizer_jid"],
                'start_date':
                time_to_str(meeting['start_date']),
                'end_date':
                time_to_str(meeting['end_date']),
                'room_id':
                meeting['room_id'],
                'temperature':
                meeting['temperature']
            })
            response.to = str(meeting['room_id'])
            await self.send(response)

            self.agent.meeting_room_calendars[meeting['room_id']].add_event(
                self.meeting_guid, meeting['start_date'], meeting['end_date'],
                meeting['temperature'])

            organizer_response = Message(to=meeting["organizer_jid"])
            organizer_response.set_metadata('performative', 'inform')
            organizer_response.set_metadata('type', 'meet_inform')
            organizer_response.body = json.dumps({
                'meeting_guid':
                self.meeting_guid,
                'start_date':
                time_to_str(meeting['start_date']),
                'end_date':
                time_to_str(meeting['end_date']),
                'room_id':
                meeting['room_id'],
                'temperature':
                meeting['temperature']
            })
            await self.send(organizer_response)
            self.agent.processing_meeting = False

            if runtime_switches.log_level >= 0:
                print("Meeting with GUID ", self.meeting_guid,
                      " was scheduled in room ", meeting['room_id'], " from ",
                      meeting['start_date'], " to ", meeting['end_date'],
                      " with temperature ", meeting['temperature'])
Exemple #11
0
    async def CheckObjectsAtStep(self, _idAgent, behaviour):

        if len(self.m_DinObjectList) <= 0:
            return

        if self.m_AgentList[_idAgent].m_iHealth <= 0:
            return

        WIDE = 3
        xmin = self.m_AgentList[_idAgent].m_Locate.m_Position.x - WIDE
        zmin = self.m_AgentList[_idAgent].m_Locate.m_Position.z - WIDE
        xmax = self.m_AgentList[_idAgent].m_Locate.m_Position.x + WIDE
        zmax = self.m_AgentList[_idAgent].m_Locate.m_Position.z + WIDE

        for DinObject in self.m_DinObjectList.values():
            if DinObject.m_eType == CPack.PACK_MEDICPACK and self.m_AgentList[_idAgent].m_iHealth >= 100: continue
            if DinObject.m_eType == CPack.PACK_AMMOPACK  and self.m_AgentList[_idAgent].m_iAmmo >= 100:   continue
            if DinObject.m_eType == CPack.PACK_OBJPACK   and DinObject.m_bTaken and DinObject.m_Owner >0: continue

            if  DinObject.m_Position.x >= xmin and DinObject.m_Position.x <= xmax \
            and DinObject.m_Position.z >= zmin and DinObject.m_Position.z <= zmax:

                # Agent has stepped on pack
                bSend = False
                id = DinObject.m_JID
                iQty = 0
                eType = DinObject.m_eType
                owner = DinObject.m_JID
                sContent = ""

                # Statistics
                eTeam = self.m_AgentList[_idAgent].m_eTeam
                if DinObject.m_eTeam == CTroop.TEAM_ALLIED:
                    ePackTeam = 0
                else:    ePackTeam = 1

                if DinObject.m_eType == CPack.PACK_MEDICPACK:
                    # Statistics
                    if DinObject.m_eTeam == eTeam:
                        self.m_GameStatistic.m_tTeamStatistic[ePackTeam].m_iPacks[0].m_iTeamTaken=\
                        self.m_GameStatistic.m_tTeamStatistic[ePackTeam].m_iPacks[0].m_iTeamTaken+1
                    else:
                        self.m_GameStatistic.m_tTeamStatistic[ePackTeam].m_iPacks[0].m_iEnemyTaken=\
                        self.m_GameStatistic.m_tTeamStatistic[ePackTeam].m_iPacks[0].m_iEnemyTaken+1

                    iQty = 20
                    try:
                        del self.m_DinObjectList[id]
                        print (self.m_AgentList[_idAgent].m_JID + ": got a medic pack " + str(DinObject.m_JID))
                        sContent = " TYPE: " + str(eType) + " QTY: " + str(iQty) + " "
                        bSend = True

                    except:
                        print("NO SE PUEDE BORRAR LA CLAVE")

                elif DinObject.m_eType == CPack.PACK_AMMOPACK:
                    # Statistics
                    if DinObject.m_eTeam == eTeam:
                        self.m_GameStatistic.m_tTeamStatistic[ePackTeam].m_iPacks[1].m_iTeamTaken=\
                        self.m_GameStatistic.m_tTeamStatistic[ePackTeam].m_iPacks[1].m_iTeamTaken+1
                    else:
                        self.m_GameStatistic.m_tTeamStatistic[ePackTeam].m_iPacks[1].m_iEnemyTaken=\
                        self.m_GameStatistic.m_tTeamStatistic[ePackTeam].m_iPacks[1].m_iEnemyTaken+1

                    iQty = 20
                    try:
                        del self.m_DinObjectList[id]
                        print (self.m_AgentList[_idAgent].m_JID + ": got an ammo pack " + str(DinObject.m_JID))
                        sContent = " TYPE: " + str(eType) + " QTY: " + str(iQty) + " "
                        bSend = True
                    except:
                        print("NO SE PUEDE BORRAR LA CLAVE")

                elif DinObject.m_eType == CPack.PACK_OBJPACK:

                    if self.m_AgentList[_idAgent].m_eTeam == CTroop.TEAM_ALLIED:
                        print(self.m_AgentList[_idAgent].m_JID + ": got the objective pack " + str(DinObject.m_JID))
                        DinObject.m_bTaken = True
                        DinObject.m_Owner = _idAgent
                        DinObject.m_Position.x = DinObject.m_Position.y = DinObject.m_Position.z = 0.0
                        self.m_AgentList[_idAgent].m_bCarryingObjective = True
                        sContent = " TYPE: " + str(eType) + " QTY: 0 TEAM: ALLIED "
                        bSend = True

                        # Statistics
                        self.m_GameStatistic.m_tTeamStatistic[0].m_iTotalObjectiveTaken = \
                        self.m_GameStatistic.m_tTeamStatistic[0].m_iTotalObjectiveTaken + 1
                        self.m_GameStatistic.m_tTeamStatistic[1].m_iTotalObjectiveLost  = \
                        self.m_GameStatistic.m_tTeamStatistic[1].m_iTotalObjectiveLost  + 1

                    elif self.m_AgentList[_idAgent].m_eTeam == CTroop.TEAM_AXIS:
                        if DinObject.m_bTaken:
                            print (self.m_AgentList[_idAgent].m_JID + ": returned the objective pack " + str(DinObject.m_JID))
                            DinObject.m_bTaken = False
                            DinObject.m_Owner = 0
                            DinObject.m_Position.x =self.m_Map.GetTargetX()
                            DinObject.m_Position.y =self.m_Map.GetTargetY()
                            DinObject.m_Position.z =self.m_Map.GetTargetZ()
                            sContent = " TYPE: " + str(eType) + " QTY: 0 TEAM: AXIS "
                            bSend = True

                            # Statistics
                            self.m_GameStatistic.m_tTeamStatistic[1].m_iTotalObjectiveTaken=\
                            self.m_GameStatistic.m_tTeamStatistic[1].m_iTotalObjectiveTaken+1
                else:
                    sContent = " TYPE: " + str(CPack.PACK_NONE) + " QTY: 0 "

                #// Send a destroy/taken msg to pack and an inform msg to agent
                if bSend:
                    msg = Message(to=owner)
                    msg.set_metadata("performative", "pack_taken")
                    msg.body=sContent
                    await behaviour.send(msg)

                    msg = Message(to=self.m_AgentList[_idAgent].m_AID)
                    msg.set_metadata("performative", "pack_taken")
                    msg.body = sContent
                    await behaviour.send(msg)
Exemple #12
0
def test_body_set_not_string():
    msg = Message()
    with pytest.raises(TypeError):
        msg.body = 1000
Exemple #13
0
            async def run(self):
                msg = await self.receive(timeout=LONG_RECEIVE_WAIT)
                if msg:
                    content = json.loads(msg.body)
                    shooter_id = content[NAME]
                    aim = int(content[AIM])
                    shots = int(content[SHOTS])
                    victim_pos = Vector3D(x=content[X],
                                          y=content[Y],
                                          z=content[Z])
                    try:
                        shooter = self.agent.agents[shooter_id]
                    except KeyError:
                        return

                    victim = self.agent.shoot(shooter_id, victim_pos)
                    self.agent.game_statistic.shoot(victim, shooter.team)

                    if victim is None:
                        return

                    damage = 2 if shooter.type == CLASS_SOLDIER else 1
                    damage *= shots
                    victim.health -= damage
                    logger.info("Victim hit: {}".format(victim))

                    if victim.health <= 0:
                        victim.health = 0
                        logger.info("Agent {} died.".format(victim.jid))

                        if victim.is_carrying_objective:
                            victim.is_carrying_objective = False
                            logger.info(
                                "Agent {} lost the ObjectivePack.".format(
                                    victim.jid))

                            for din_object in self.agent.din_objects.values():

                                if din_object.type == PACK_OBJPACK:
                                    din_object.is_taken = False
                                    din_object.owner = 0
                                    msg_pack = Message(to=str(din_object.jid))
                                    msg_pack.set_metadata(
                                        PERFORMATIVE, PERFORMATIVE_PACK_LOST)
                                    din_object.position.x = victim.locate.position.x
                                    din_object.position.y = victim.locate.position.y
                                    din_object.position.z = victim.locate.position.z
                                    msg_pack.body = json.dumps({
                                        X:
                                        victim.locate.position.x,
                                        Y:
                                        victim.locate.position.y,
                                        Z:
                                        victim.locate.position.z,
                                    })
                                    await self.send(msg_pack)

                                    # Statistics
                                    self.agent.game_statistic.objective_lost(
                                        victim.team)
                                    break

                    msg_shot = Message(to=victim.jid)
                    msg_shot.set_metadata(PERFORMATIVE, PERFORMATIVE_SHOOT)
                    msg_shot.body = json.dumps({DEC_HEALTH: damage})
                    await self.send(msg_shot)
Exemple #14
0
def test_body_set_none():
    msg = Message()
    msg.body = None
Exemple #15
0
 async def run(self):
     res = await self.receive(timeout=10000)
     msg = Message(to="objective1@localhost")
     msg.set_metadata("performative", "inform")
     msg.body = "Hello"
     await self.send(msg)
Exemple #16
0
 async def run(self):
     print("I'm at state one (initial state)")
     msg = Message(to=str(self.agent.jid))
     msg.body = "msg_from_state_one_to_state_three"
     await self.send(msg)
     self.set_next_state(STATE_TWO)
Exemple #17
0
        async def run(self):
            try:
                if not self.agent.movement:
                    return
                content = {NAME: self.agent.name,
                           X: self.agent.movement.position.x,
                           Y: self.agent.movement.position.y,
                           Z: self.agent.movement.position.z,
                           VEL_X: self.agent.movement.velocity.x,
                           VEL_Y: self.agent.movement.velocity.y,
                           VEL_Z: self.agent.movement.velocity.z,
                           HEAD_X: self.agent.movement.heading.x,
                           HEAD_Y: self.agent.movement.heading.y,
                           HEAD_Z: self.agent.movement.heading.z,
                           HEALTH: self.agent.health,
                           AMMO: self.agent.ammo}
                msg = Message(to=self.agent.manager)
                msg.set_metadata(PERFORMATIVE, PERFORMATIVE_DATA)
                msg.body = json.dumps(content)

                await self.send(msg)

                info = await self.receive(LONG_RECEIVE_WAIT)
                if info is None:
                    return
                info = json.loads(info.body)

                packs = info[PACKS] if info[PACKS] is not None else []
                for pack in packs:
                    pack = json.loads(pack)
                    quantity = pack[QTY]
                    type_ = pack[TYPE]
                    self.agent.pack_taken(pack_type=type_, quantity=quantity)

                self.agent.fov_objects = []
                fovs = info[FOV] if info[FOV] is not None else []
                if len(fovs) <= 0:
                    self.agent.aimed_agent = None
                else:
                    for idx, obj in enumerate(fovs):
                        s = Sight()
                        s.sight_id = idx
                        s.team = int(obj[TEAM])
                        s.type = int(obj[TYPE])
                        s.angle = float(obj[ANGLE])
                        s.distance = float(obj[DISTANCE])
                        s.health = int(obj[HEALTH])
                        s.position.x = float(obj[X])
                        s.position.y = float(obj[Y])
                        s.position.z = float(obj[Z])
                        self.agent.fov_objects.append(s)
                        if s.team == TEAM_NONE:
                            self.agent.bdi.set_belief(PACKS_IN_FOV, idx, int(obj[TYPE]), float(obj[ANGLE]),
                                                      float(obj[DISTANCE]), int(obj[HEALTH]), tuple((float(obj[X]), float(obj[Y]), float(obj[Z]))))
                        elif s.team == self.agent.team:
                            self.agent.bdi.set_belief(FRIENDS_IN_FOV, idx, int(obj[TYPE]), float(obj[ANGLE]),
                                                      float(obj[DISTANCE]), int(obj[HEALTH]), tuple((float(obj[X]), float(obj[Y]), float(obj[Z]))))
                        else:
                            self.agent.bdi.set_belief(ENEMIES_IN_FOV, idx, int(obj[TYPE]), float(obj[ANGLE]),
                                                      float(obj[DISTANCE]), int(obj[HEALTH]), tuple((float(obj[X]), float(obj[Y]), float(obj[Z]))))

            except ZeroDivisionError:
                pass
Exemple #18
0
def prep_msg(to, meta_key, meta_value, msg_body):
    msg_to_send = Message(to=str(to))
    msg_to_send.set_metadata(meta_key, meta_value)
    msg_to_send.body = msg_body

    return msg_to_send
 def prepare_temperature_at_inform(receivers, guid, temperature):
     msg = Message(to=receivers)
     msg.set_metadata('performative', 'inform')
     msg.set_metadata('type', 'temperature_at_inform')
     msg.body = json.dumps({'request-guid': guid, 'temperature': temperature})
     return msg
Exemple #20
0
def test_body_set_string():
    msg = Message()
    msg.body = "body"
Exemple #21
0
    async def check_objects_at_step(self, id_agent, behaviour):

        if len(self.din_objects) <= 0:
            return

        if self.agents[id_agent].health <= 0:
            return

        xmin = self.agents[id_agent].locate.position.x - WIDTH
        zmin = self.agents[id_agent].locate.position.z - WIDTH
        xmax = self.agents[id_agent].locate.position.x + WIDTH
        zmax = self.agents[id_agent].locate.position.z + WIDTH

        packs = []

        keys = list(self.din_objects.keys())
        for key in keys:
            if key not in self.din_objects:
                continue
            din_object = self.din_objects[key]
            if (din_object.type == PACK_MEDICPACK
                    and self.agents[id_agent].health >= 100):
                continue
            if din_object.type == PACK_AMMOPACK and self.agents[
                    id_agent].ammo >= 100:
                continue
            if (din_object.type == PACK_OBJPACK and din_object.is_taken
                    and din_object.owner != 0):
                continue

            if (xmin <= din_object.position.x <= xmax
                    and zmin <= din_object.position.z <= zmax):
                # Agent has stepped on pack
                id_ = din_object.jid
                type_ = din_object.type
                owner = str(din_object.jid)
                content = None

                team = self.agents[id_agent].team
                self.game_statistic.pack_taken(din_object, team)

                if din_object.type == PACK_MEDICPACK:
                    quantity = DEFAULT_PACK_QTY
                    try:
                        del self.din_objects[id_]
                        logger.info(self.agents[id_agent].jid +
                                    ": got a medic pack " +
                                    str(din_object.jid))
                        content = {TYPE: type_, QTY: quantity}

                    except KeyError:
                        logger.error(
                            "Could not delete the din object {}".format(id_))

                elif din_object.type == PACK_AMMOPACK:
                    quantity = DEFAULT_PACK_QTY
                    try:
                        del self.din_objects[id_]
                        logger.info(self.agents[id_agent].jid +
                                    ": got an ammo pack " +
                                    str(din_object.jid))
                        content = {TYPE: type_, QTY: quantity}
                    except KeyError:
                        logger.error(
                            "Could not delete the din object {}".format(id_))

                elif din_object.type == PACK_OBJPACK:
                    if team == TEAM_ALLIED:
                        logger.info("{}: got the objective pack ".format(
                            self.agents[id_agent].jid))
                        din_object.is_taken = True
                        din_object.owner = id_agent
                        (
                            din_object.position.x,
                            din_object.position.y,
                            din_object.position.z,
                        ) = (0.0, 0.0, 0.0)
                        self.agents[id_agent].is_carrying_objective = True
                        content = {TYPE: type_, QTY: 0, TEAM: TEAM_ALLIED}

                    elif team == TEAM_AXIS:
                        if din_object.is_taken:
                            logger.info(
                                f"{self.agents[id_agent].jid}: returned the objective pack {din_object.jid}"
                            )
                            din_object.is_taken = False
                            din_object.owner = 0
                            din_object.position.x = self.map.get_target_x()
                            din_object.position.y = self.map.get_target_y()
                            din_object.position.z = self.map.get_target_z()
                            content = {TYPE: type_, QTY: 0, TEAM: TEAM_AXIS}

                # // Send a destroy/taken msg to pack and an inform msg to agent
                if content:
                    content = json.dumps(content)
                    msg = Message(to=owner)
                    msg.set_metadata(PERFORMATIVE, PERFORMATIVE_PACK_TAKEN)
                    msg.body = content
                    await behaviour.send(msg)
                    packs.append(content)
        return packs
Exemple #22
0
def test_body_set_not_string():
    msg = Message()
    with pytest.raises(TypeError):
        msg.body = 1000
 def get_message(agent, us_data: UserStrategyData):
     print("Sending data to {}".format(agent))
     msg = Message(names_to_addresses[agent])
     msg.set_metadata("performative", "inform")
     msg.body = us_data
     return msg
Exemple #24
0
            async def run(self):
                msg = await self.receive(True)
                if msg:
                    sContent = msg.body

                    tokens = sContent.split()
                    id = int(tokens[1])
                    iAim = int(tokens[3])
                    iShots = int(tokens[5])

                    iShooterID = 0
                    for agent in self.agent.m_AgentList.values():
                        if agent.m_JID == id:
                            iShooterID = agent.m_JID
                            break
                    if iShooterID == 0:
                        return

                    # Statistics
                    if self.agent.m_AgentList[iShooterID].m_eTeam == CTroop.TEAM_ALLIED:
                        eTeam = 0
                    else:
                        eTeam = 1
                    self.agent.m_GameStatistic.m_tTeamStatistic[eTeam].m_iTotalShots += 1

                    Victim = self.agent.Shot(id)
                    if Victim is None:
                        # Statistics
                        self.agent.m_GameStatistic.m_tTeamStatistic[eTeam].m_iFailedShots += 1
                        return

                    # Statistics
                    if self.agent.m_AgentList[iShooterID].m_eTeam == Victim.m_eTeam:
                        self.agent.m_GameStatistic.m_tTeamStatistic[eTeam].m_iTeamHitShots += 1
                    else:
                        self.agent.m_GameStatistic.m_tTeamStatistic[eTeam].m_iEnemyHitShots += 1

                    iDamage = 2
                    if self.agent.m_AgentList[iShooterID].m_eType == CTroop.CLASS_SOLDIER:
                        iDamage = 3

                    msgShot = Message(to=Victim.m_JID)
                    msgShot.set_metadata("performative", "shot")

                    msgShot.body = "DEC_HEALTH: " + str(iDamage)
                    await self.send(msgShot)

                    self.agent.m_AgentList[Victim.m_JID].m_iHealth -= iDamage
                    if self.agent.m_AgentList[Victim.m_JID].m_iHealth <= 0:
                        self.agent.m_AgentList[Victim.m_JID].m_iHealth = 0
                        print("Agent", str(self.agent.m_AgentList[Victim.m_JID].m_sName), "died")

                        if self.agent.m_AgentList[Victim.m_JID].m_bCarryingObjective == True:
                            self.agent.m_AgentList[Victim.m_JID].m_bCarryingObjective = False
                            print("Agent", str(self.agent.m_AgentList[Victim.m_JID].m_sName), "lost the ObjectivePack")

                            for DinObject in self.agent.m_DinObjectList.values():

                                if DinObject.m_eType == CPack.PACK_OBJPACK:
                                    #Esto sobra: DinObject.m_bTaken = false;
                                    DinObject.m_Owner = 0
                                    msgPack = Message(to=DinObject.m_JID)
                                    msgPack.set_metadata("performative", "pack_lost")
                                    DinObject.m_Position.x = self.agent.m_AgentList[Victim.m_id].m_Locate.m_Position.x
                                    DinObject.m_Position.y = self.agent.m_AgentList[Victim.m_id].m_Locate.m_Position.y
                                    DinObject.m_Position.z = self.agent.m_AgentList[Victim.m_id].m_Locate.m_Position.z
                                    msgPack.body = "POSITION: ( " + \
                                                   str(self.agent.m_AgentList[Victim.m_id].m_Locate.m_Position.x) + \
                                                   " , " + \
                                                   str(self.agent.m_AgentList[Victim.m_id].m_Locate.m_Position.y) + \
                                                   " , " + \
                                                   str(self.agent.m_AgentList[Victim.m_id].m_Locate.m_Position.z) + \
                                                   " ) "
                                    await self.send(msgPack)

                                    # Statistics
                                    self.agent.m_GameStatistic.m_tTeamStatistic[0].m_iTotalObjectiveLost += 1
Exemple #25
0
        async def run(self):
            """Behavior main function. 

            Sends messages to ChatAgent or ImageAgent.
            """

            logger.debug("DispatcherBehav running")
            if self.agent.pipe.poll():  # Avoid blocking thread
                bot_msg = self.agent.pipe.recv()  # Blocking
                logger.info(
                    "[DispatcherBehav] Received msg from DASI Bot: {}".format(
                        bot_msg))
                assert type(bot_msg) == dict
                t = 10
                if 'Image' in bot_msg:
                    # Notify to ImageAgent
                    msg = Message(to=IMAGE_JID)
                    msg.set_metadata("performative", "request")
                    msg.body = bot_msg['Image']
                    await self.send(msg)

                    # Recive ImageAgent's response
                    response = await self.receive(timeout=3)
                    # Pass response to bot - notify to user
                    if response:
                        ingred = self.agent.INGREDIENTS[int(response.body)]
                        self.agent.pipe.send(ingred)
                    # else:
                    #     self.agent.pipe.send('Lo siento, el servidor tiene problemas. Prueba más tarde')
                elif 'CU-001' in bot_msg:
                    # Notify CheffAgent
                    msg = Message(to=CHEFF_JID)
                    msg.set_metadata("performative", "request")
                    msg.body = 'Start cooking!'
                    await self.send(msg)

                    # Recive cheff's response
                    response = await self.receive(timeout=t)
                    # Pass response to bot - notify to user
                    if response:
                        all_menus = np.array(json.loads(response.body))
                        if all_menus.max() > 0:
                            # # JSON with best recipe
                            # menu = {
                            #     'Title': self.recipe_book[all_menus.argmax()]['Title'],
                            #     'Ingredients': self.recipe_book[all_menus.argmax()]['Ingredients'],
                            #     'Directions': self.recipe_book[all_menus.argmax()]['Steps'],
                            # }
                            # List with 5 best recipes
                            menu = []
                            N = 5
                            best_menu = all_menus.argsort()[-N:][::-1]
                            for m in best_menu:
                                if all_menus[m] > 0:
                                    menu.append(self.recipe_book[m]['Title'])
                                else:
                                    break

                        else:
                            menu = None
                        self.agent.pipe.send(menu)
                    else:
                        self.agent.pipe.send(
                            'Lo siento, el servidor tiene problemas. Prueba más tarde'
                        )
                elif 'CU-002' in bot_msg:
                    # Notify cheff
                    msg = Message(to=CHEFF_JID)
                    msg.set_metadata("performative", "query_ref")
                    msg.body = str(self.agent.RECIPES.index(bot_msg['CU-002']))
                    logger.info(
                        f"[DispatcherBehav] {bot_msg['CU-002']} - {msg.body}")
                    await self.send(msg)

                    # Recive cheff's response
                    response = await self.receive(timeout=t)
                    # Pass response to bot - notify to user
                    if response:
                        lst = json.loads(response.body)
                        self.agent.pipe.send(lst)
                    else:
                        self.agent.pipe.send(
                            'Lo siento, el servidor tiene problemas. Prueba más tarde'
                        )
                elif 'CU-003' in bot_msg:
                    prefs = bot_msg['CU-003']
                    f = bot_msg['factor']
                    logger.info(
                        f'[DispatcherBehav] Message containing {len(prefs)} preferences'
                    )
                    logger.info(f'[DispatcherBehav] Factor of prefs is {f}')

                    msg = Message(to=CHEFF_JID)
                    msg.set_metadata("performative", "inform_ref")
                    v = -10 if f == 'GuardarAlergia' else 5
                    msgs = []
                    for i in prefs:
                        logger.info(i)
                        msgs.append({
                            'Ingredient':
                            self.agent.INGREDIENTS.index(i),
                            'Value':
                            v
                        })
                    msg.body = json.dumps(msgs)
                    await self.send(msg)
                    logger.info(f"[DispatcherBehav] Message sent: {msg.body}")

                elif 'CU-004' in bot_msg:
                    choice = self.agent.RECIPES.index(bot_msg['CU-004'])

                    menu = {
                        'Title': self.recipe_book[choice]['Title'],
                        'Ingredients': self.recipe_book[choice]['Ingredients'],
                        'Directions': self.recipe_book[choice]['Steps'],
                    }
                    self.agent.pipe.send(menu)

                else:  # bad message
                    logger.warning(
                        f'[DispatcherBehav] Message recived: {bot_msg}')
Exemple #26
0
def test_body_set_string():
    msg = Message()
    msg.body = "body"
 def prepare_outdoor_temperature_request(receivers, date):
     msg = Message(to=receivers)
     msg.set_metadata('performative', 'request')
     msg.set_metadata('type', 'outdoor_temperature_request')
     msg.body = json.dumps({'date': time_to_str(date)})
     return msg
Exemple #28
0
def test_body_set_none():
    msg = Message()
    msg.body = None
Exemple #29
0
 def prepare_job_late_inform(self, date, receivers):
     msg = Message(to=receivers)
     msg.set_metadata('performative', 'inform')
     msg.set_metadata('type', 'job_late_inform')
     msg.body = json.dumps({'arrival_datetime': time_to_str(date)})
     return msg
 def prepare_room_data_inform(temperature, receivers):
     msg = Message(to=receivers)
     msg.set_metadata('performative', 'inform')
     msg.set_metadata('type', 'room_data_inform')
     msg.body = json.dumps({'temperature': temperature})
     return msg
        async def run(self):
            global finish
            msg = await self.receive(timeout=10
                                     )  # wait for a message for 10 seconds
            if msg:
                if msg.body is "ok":
                    print("Vendeur : Vendu pour {} euros !".format(
                        self.prix_courant))
                    finish = True
                    self.restart()
                else:
                    if msg.body is "ko":
                        print("Vendeur : L'acheteur refuse, fin de la vente!")
                        finish = True
                        self.restart()
                    else:
                        print("Vendeur : Proposition reçu : {} euros".format(
                            msg.body))
                        prix_reçu = float(msg.body)
                        if prix_reçu >= self.prix_de_reserve_vendeur:
                            print("Vendeur : Vendu pour {} euros !".format(
                                prix_reçu))
                            msg = Message(to="buyer@localhost"
                                          )  # Instantiate the message
                            msg.set_metadata(
                                "performative",
                                "inform")  # Set the "inform" FIPA performative
                            msg.body = "ok"
                            finish = True
                            self.restart()

                        else:

                            print("Vendeur : Prix proposé trop bas !")
                            msg = Message(to="buyer@localhost"
                                          )  # Instantiate the message
                            msg.set_metadata(
                                "performative",
                                "inform")  # Set the "inform" FIPA performative
                            if self.prix_courant == self.prix_de_reserve_vendeur:
                                msg.body = "ko"
                                print(
                                    "Vendeur : Je ne peux pas descendre plus bas que {} euros, je refuse la vente"
                                    .format(self.prix_de_reserve_vendeur))
                                await self.send(msg)
                                finish = True
                                self.restart()

                            else:
                                self.prix_courant = float(
                                    self.prix_courant *
                                    self.concession_vendeur)
                                if self.prix_courant < self.prix_de_reserve_vendeur:
                                    self.prix_courant = self.prix_de_reserve_vendeur
                                print(
                                    "Vendeur : Envoie de la concession de {} euros"
                                    .format(self.prix_courant))
                                msg.body = str(self.prix_courant)
                                await self.send(msg)

            else:
                print(
                    "Vendeur : Did not received any message after 10 seconds")
 async def run(self):
     msg = Message(to=str(self.recipient_jid))
     msg.set_metadata("performative", "inform")
     msg.body = self.message_body
     await self.send(msg)
Exemple #33
0
template = Template()
# template.sender = "sender1@host"
template.sender = "madks@Temp3rr0r-pc"
# template.to = "recv1@host"
template.to = "admin@Temp3rr0r-pc"
template.body = "Hello World"
template.thread = "thread-id"
template.metadata = {"performative": "query"}

message = Message()
# message.sender = "sender1@host"
message.sender = "madks@Temp3rr0r-pc"
# message.to = "recv1@host"
message.to = "admin@Temp3rr0r-pc"
message.body = "Hello World"
message.thread = "thread-id"
message.set_metadata("performative", "query")

assert template.match(message)

t1 = Template()
# t1.sender = "sender1@host"
t1.sender = "madks@Temp3rr0r-pc"
t2 = Template()
# t2.to = "recv1@host"
t2.to = "admin@Temp3rr0r-pc"
t2.metadata = {"performative": "query"}

m = Message()
# m.sender = "sender1@host"
 def prepare_energy_usage_inform(energy, receivers):
     msg = Message(to=receivers)
     msg.set_metadata('performative', 'inform')
     msg.set_metadata('type', 'energy_usage_inform')
     msg.body = json.dumps({'energy_used_since_last_message': energy})
     return msg
Exemple #35
0
 async def run(self):
     msg = Message(to=self.m_Manager)
     msg.set_metadata("performative", "inform")
     msg.body = "ID: " + self.agent.name + " DESTROY "
     await self.send(msg)
     self.agent._kill()
 def prepare_meeting_score_inform(receivers, guid, score):
     msg = Message(to=receivers)
     msg.set_metadata('performative', 'inform')
     msg.set_metadata('type', 'meeting_score_inform')
     msg.body = json.dumps({'meeting_guid': guid, 'score': score})
     return msg
Exemple #37
0
        async def run(self):
            # Cogemos la clasificacion, el presupuesto y las rachas de el equipo escogido
            try:
                clasificacion_equipo = self.clasificacion[self.equipo]['posicion']
            except KeyError as error:
                raise KeyError(f'No se puede obtener la clasificación del equipo {self.equipo}: {error}')
            try:
                if self.equipo in self.presupuestos.keys():
                    presupuesto_equipo = self.presupuestos[self.equipo]
                else:
                    presupuesto_equipo = 0
            except KeyError as error:
                raise KeyError(f'No se puede obtener el presupuesto del equipo {self.equipo}: {error}')
            try:
                if self.equipo in self.rachas['ganando'].keys():
                    rachaG_equipo = self.rachas['ganando'][self.equipo]
                else:
                    rachaG_equipo = 0
            except KeyError as error:
                raise KeyError(f'No se pueden obtener las rachas de partidos ganados por {self.equipo}: {error}')
            try:
                if self.equipo in self.rachas['perdiendo'].keys():
                    rachaP_equipo = self.rachas['perdiendo'][self.equipo]
                else:
                    rachaP_equipo = 0
            except KeyError as error:
                raise KeyError(f'No se pueden obtener las rachas de partidos perdidos por {self.equipo}: {error}')
            try:
                if self.equipo in self.rachas['empatando'].keys():
                    rachaE_equipo = self.rachas['empatando'][self.equipo]
                else:
                    rachaE_equipo = 0
            except KeyError as error:
                raise KeyError(f'No se pueden obtener las rachas de partidos empatados por {self.equipo}: {error}')
            try:
                if self.equipo in self.rachas['sin_ganar'].keys():
                    rachaNG_equipo = self.rachas['sin_ganar'][self.equipo]
                else:
                    rachaNG_equipo = 0
            except KeyError as error:
                raise KeyError(f'No se pueden obtener las rachas de partidos empatados por {self.equipo}: {error}')
            try:
                if self.equipo in self.rachas['sin_perder'].keys():
                    rachaNP_equipo = self.rachas['sin_perder'][self.equipo]
                else:
                    rachaNP_equipo = 0
            except KeyError as error:
                raise KeyError(f'No se pueden obtener las rachas de partidos empatados por {self.equipo}: {error}')

            information = {
                'clasificacion': clasificacion_equipo,
                'presupuesto': presupuesto_equipo,
                'rachas': {
                    'ganando': rachaG_equipo,
                    'empatando': rachaE_equipo,
                    'perdiendo': rachaP_equipo,
                    'sin_ganar': rachaNG_equipo,
                    'sin_perder': rachaNP_equipo
                }
            }
            # Creamos el mensaje y lo mandamos al agente de reglas difusas
            msg = Message(to="agente_reglas@localhost")  
            msg.set_metadata("performative", "inform")  # Su performativa será de tipo inform
            msg.body = json.dumps(information)  # Convertimos el diccionario con la informacion del equipo en string
            # Mandamos el mensaje
            await self.send(msg)
            # Detenemos el agente
            await self.agent.stop()