Changeset 165
- Timestamp:
- 05/29/02 10:02:01 (6 years ago)
- Files:
-
- trunk/RBJabber/RBJabber/Conference.py (modified) (6 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBJabber/RBJabber/Conference.py
r164 r165 47 47 from Foundation.Jabber.JabberSubject import JabberSubjectBase 48 48 from Foundation.Jabber import JID 49 from Foundation.Jabber import JabberObserver as JObs 49 50 from Foundation.SubjectObserver.Observer import Observer 51 from Foundation.SubjectObserver.AttributedSubject import AttributedSubject 50 52 51 53 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 80 82 JC.stream.AddObserver('iq', obs) 81 83 84 # Prepare to get the conference roster 85 self.roster = AttributedSubject() 86 obs = JObs.JabberObserver(self._OnIQBrowseSets, BidValue=0.1) 87 obs.AddRule(JObs.MatchAttributes(type='set', from_=self.ConferenceJID.nominal())) 88 obs.AddRule(JObs.MatchHasChildNamespace('jabber:iq:browse')) 89 self.stream.AddObserver('iq', obs) 90 82 91 def __del__(self): 83 92 """Disconnects from the conference if the Jabber Client still exists""" … … 100 109 return self.__super.Bid(subject, **UpdateDict) 101 110 111 def _OnIQBrowseSets(self, subject, iq): 112 users = getattr(iq, 'user', []) + [user for conf in getattr(iq, 'conference', []) for users in getattr(iq, 'user', []) for user in users] 113 114 for user in users: 115 if getattr(user, 'type', '') == 'remove': 116 del self.roster[user.jid] 117 else: 118 self.roster[user.jid] = getattr(user, 'name', user.jid) 119 102 120 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 103 121 #~ Public Methods … … 131 149 def ChangeNick(self, Nick, callback=None): 132 150 """Changes the nickname of the conference connection""" 133 if not isinstance(Nick, (list, tuple)): Nick = (Nick,) 134 xmlNick = ''.join(['<nick>%s</nick>' % x for x in Nick]) 135 return self.JC().Query('jabber:iq:conference', toJID=self.ConferenceJID, type='set', xml=xmlNick, callback=callback) 151 newjid = self.ConferenceJID.join(self.ConferenceJID.split(1,3) + [Nick]) 152 return self.JC().Presence(newjid) 136 153 137 154 def Invite(self, *args, **kw): … … 140 157 return self.JC().Message(*args, **kw) 141 158 142 def Message(self, *args, **kw):159 def Message(self, body='', subject='', type='groupchat', id=None, xml=''): 143 160 """Sends a message to the conference""" 144 return self.JC().Message(self.ConferenceJID, *args, **kw)161 return self.JC().Message(self.ConferenceJID, body=body, subject=subject, type=type, id=id, xml=xml) 145 162 146 163 def Presence(self, *args, **kw): … … 158 175 for each in kw.itervalues(): 159 176 print each._toXML() 160 jc = Client.Client('www.runeblade.com' )177 jc = Client.Client('www.runeblade.com', fileIn=open('conf.in','w'), fileOut=open('conf.out','w')) 161 178 jc.Authenticate('shane.test1', 'testing', 'PyConferenceTest') 162 179 conf = Conference(jc, 'shane.conf@private.www.runeblade.com') 163 180 conf.AddObserver('message', PrintStuff) 164 181 conf.AddObserver('presence', PrintStuff) 165 conf.AddObserver('iq', PrintStuff)182 #conf.AddObserver('iq', PrintStuff) 166 183 conf.JoinAs('RuneBlade.Development') 167 184 conf.Message('Hello from RB development!!!') 185 conf.ChangeNick('shane.test1') 186 conf.Message('Why, isnt this fun?') 187 conf.Invite('shane.holloway@www.runeblade.com', subject='Please join me!', body='Please join me in shane.conf@private.www.runeblade.com') 168 188 jc.ProcessPending(1.0) 169 189 try: trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py
r164 r165 91 91 return self._attributes.__getitem__(*args, **kw) 92 92 93 def __setitem__(self, *args, **kw): 94 return self._attributes.__setitem__(*args, **kw) 93 def __setitem__(self, name, value): 94 result = self._attributes.__setitem__(name, value) 95 self.UpdateObservers(**{name: value}) 96 return result 95 97 96 def __delitem__(self, *args, **kw): 97 return self._attributes.__delitem__(*args, **kw) 98 def __delitem__(self, name): 99 result = self._attributes.__delitem__(name) 100 self.UpdateObservers(**{name: None}) 101 return result 98 102 99 103 def __hash__(self): … … 101 105 102 106 def clear(self): 103 return self._attributes.clear() 107 UpdateDict = dict(map(None, self._attributes.keys(), tuple())) 108 result = self._attributes.clear() 109 self.UpdateObservers(**UpdateDict) 110 return result 104 111 105 112 def copy(self): … … 113 120 114 121 def popitem(self, *args, **kw): 115 return self._attributes.popitem(*args, **kw) 122 result = self._attributes.popitem(*args, **kw) 123 self.UpdateObservers(**{name:None}) 124 return result 116 125 117 def setdefault(self, *args, **kw): 118 return self._attributes.setdefault(*args, **kw) 126 def setdefault(self, name, default): 127 if name not in self._attributes: 128 result = self._attributes.setdefault(name, default) 129 self.UpdateObservers(**{name:default}) 130 else: 131 result = self._attributes.get(name) 132 return result 119 133 120 def update(self, *args, **kw): 121 return self._attributes.update(*args, **kw) 134 def update(self, other): 135 result = self._attributes.update(other) 136 self.UpdateObservers(**other) 137 return result 122 138 123 139 def keys(self):
