Package spade :: Module socialnetwork
[hide private]
[frames] | no frames]

Source Code for Module spade.socialnetwork

 1  import Behaviour 
 2  import AID 
 3  from xmpp import * 
 4   
5 -class PresenceBehaviour(Behaviour.EventBehaviour):
6 - def _process(self):
7 self.msg = self._receive(False) 8 if self.msg != None: 9 if self.msg.getType() == "subscribe": 10 # Subscribe petition 11 # Answer YES 12 rep = Presence(to=self.msg.getFrom()) 13 rep.setType("subscribed") 14 self.myAgent.send(rep) 15 self.DEBUG( str(self.msg.getFrom()) + " subscribes to me") 16 rep.setType("subscribe") 17 self.myAgent.send(rep) 18 if self.msg.getType() == "subscribed": 19 if self.msg.getFrom() == self.myAgent.getAMS().getName(): 20 # Subscription confirmation from AMS 21 self.DEBUG( "Agent: " + str(self.myAgent.getAID().getName()) + " registered correctly (inform)","ok") 22 else: 23 self.DEBUG(str(self.msg.getFrom()) + "has subscribed me") 24 elif self.msg.getType() == "unsubscribed": 25 # Unsubscription from AMS 26 if self.msg.getFrom() == self.myAgent.getAMS().getName(): 27 self.DEBUG("There was an error registering in the AMS: " + str(self.getAID().getName()),"err") 28 else: 29 self.DEBUG(str(self.msg.getFrom()) + " has unsubscribed me") 30 elif self.msg.getType() in ["available", ""]: 31 self.myAgent.setSocialItem(self.msg.getFrom(), "available") 32 elif self.msg.getType() == "unavailable": 33 self.myAgent.setSocialItem(self.msg.getFrom(), "unavailable")
34 35 #self.myAgent.getSocialNetwork() 36 37
38 -class RosterBehaviour(Behaviour.EventBehaviour):
39 - def _process(self):
40 stanza = self._receive(False) 41 if stanza != None: 42 for item in stanza.getTag('query').getTags('item'): 43 jid=item.getAttr('jid') 44 if item.getAttr('subscription')=='remove': 45 if self.myAgent._roster.has_key(jid): del self.myAgent.roster[jid] 46 elif not self.myAgent._roster.has_key(jid): self.myAgent._roster[jid]={} 47 self.myAgent._roster[jid]['name']=item.getAttr('name') 48 self.myAgent._roster[jid]['ask']=item.getAttr('ask') 49 self.myAgent._roster[jid]['subscription']=item.getAttr('subscription') 50 self.myAgent._roster[jid]['groups']=[] 51 if not self.myAgent._roster[jid].has_key('resources'): self.myAgent._roster[jid]['resources']={} 52 for group in item.getTags('group'): self.myAgent._roster[jid]['groups'].append(group.getData()) 53 self.myAgent._waitingForRoster = False
54
55 -class SocialItem:
56 """ 57 A member of an agent's Social Network 58 AID, presence & subscription 59 """
60 - def __init__(self, agent, jid, presence=''):
61 self.myAgent = agent 62 self._jid = jid 63 self._presence = presence 64 65 # Generate AID 66 self._aid = AID.aid(name=jid, addresses=["xmpp://"+str(jid)]) 67 68 # Get subscription from roster 69 roster = agent._roster 70 if roster.has_key(jid): 71 if roster[jid].has_key("subscription"): 72 self._subscription = roster[jid]["subscription"] 73 else: 74 self._subscription = "none" 75 else: 76 self._subscription = "none"
77
78 - def setPresence(self, presence):
79 self._presence = presence
80
81 - def getPresence(self):
82 return self._presence
83
84 - def subscribe(self):
85 self.myAgent.jabber.Roster.Subscribe(self._jid)
86