Changeset 52
- Timestamp:
- 03/07/02 00:29:24 (6 years ago)
- Files:
-
- trunk/RBJabber/RBJabber/MessageRouter.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/PresenceMap.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/BidableSubject.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/Subject.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/Test.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBJabber/RBJabber/MessageRouter.py
r51 r52 2 2 #~ Imports 3 3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 5 from Foundation.SubjectObserver.Subject import Subject 6 from Foundation.SubjectObserver.BidableSubject import BiddableLogicMixin 4 7 5 8 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 7 10 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 11 9 class MessageRouterBase :12 class MessageRouterBase(BiddableLogicMixin): 10 13 def __init__(self, JC, MessageMapEntryClass=None): 11 14 JC.stream.AddObserver('message', self) 12 15 self._UpdateMap = {} 13 16 if not MessageMapEntryClass: 14 from Foundation.SubjectObserver.Subject import Subject15 17 MessageMapEntryClass = Subject 16 18 self.MessageMapEntryClass = MessageMapEntryClass 17 19 18 def Update(self, subject, UpdateDict):20 def Bid(self, subject, UpdateDict): 19 21 message = UpdateDict.get('message', None) 20 22 for index in self._UpdateMapXForm(message): 21 MessageSubject = self._UpdateMap.get(index, None) 22 if MessageSubject: 23 MessageSubject.UpdateObservers(message=message, index=index) 23 UpdateSubject = self._UpdateMap.get(index, None) 24 if UpdateSubject: 25 for obs in UpdateSubject.Observers: 26 subject._GetBid(obs(), UpdateDict) 24 27 25 28 def Get(self, index, bCreateSubject=1): trunk/RBJabber/RBJabber/PresenceMap.py
r51 r52 3 3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 4 5 from Foundation.SubjectObserver.Subject import Subject 6 from Foundation.SubjectObserver.BidableSubject import BiddableLogicMixin 5 7 from JID import * 6 8 … … 30 32 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31 33 32 class PresenceUpdateMap :34 class PresenceUpdateMap(BiddableLogicMixin): 33 35 def __init__(self, JC, PresenceMapEntryClass=None): 34 36 JC.stream.AddObserver('presence', self) 35 37 self._UpdateMap = {} 36 38 if not PresenceMapEntryClass: 37 from Foundation.SubjectObserver.Subject import Subject38 39 PresenceMapEntryClass = Subject 39 40 self.PresenceMapEntryClass = PresenceMapEntryClass … … 46 47 return self._UpdateIndexXForm(node.from_) 47 48 48 def Update(self, subject, UpdateDict):49 def Bid(self, subject, UpdateDict): 49 50 presence = UpdateDict.get('presence', None) 50 51 lstXForms = self._UpdateMapXForm(presence) 51 52 for index in lstXForms: 52 PresenceSubject = self._UpdateMap.get(index, None) 53 if PresenceSubject: 54 PresenceSubject.UpdateObservers(presence=presence, index=index) 53 UpdateSubject = self._UpdateMap.get(index, None) 54 if UpdateSubject: 55 for obs in UpdateSubject.Observers: 56 subject._GetBid(obs(), UpdateDict) 55 57 56 58 def Get(self, index, bCreateSubject=1): … … 69 71 PresenceUpdateMap.__init__(self, JC, PresenceMapEntryClass=None) 70 72 71 def Update(self, subject, UpdateDict):72 PresenceMapBasic.Update(self, subject, UpdateDict)73 PresenceUpdateMap.Update(self, subject, UpdateDict)73 #def Update(self, subject, UpdateDict): 74 # PresenceMapBasic.Update(self, subject, UpdateDict) 75 # PresenceUpdateMap.Update(self, subject, UpdateDict) trunk/RBJabber/RBJabber/SubjectObserver/BidableSubject.py
r32 r52 10 10 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 11 12 class BiddableLogicMixin: 13 def _GetBid(self, observer, UpdateDict): 14 bid = getattr(observer, 'Bid', None) 15 if bid is None: 16 # This client does not payattention to bids... 17 observer.Update(self, UpdateDict) 18 else: 19 if callable(bid): 20 bid = bid(self, UpdateDict) 21 if bid: 22 if bid > self._bids[0]: 23 self._bids = bid, [observer] 24 elif bid == self._bids[0]: 25 self._bids[-1].append(observer) 26 27 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 28 12 29 def t_BidableSubject(BaseSubject): 13 class BidableSubjectMixin(BaseSubject ):30 class BidableSubjectMixin(BaseSubject, BiddableLogicMixin): 14 31 def UpdateObserversEx(self, kw): 15 32 self._bids = 0, [] … … 22 39 def UpdateObserver(self, observer, UpdateDict): 23 40 if observer: 24 priority = getattr(observer, 'Bid', None) 25 if priority is None: 26 # This client does not payattention to bids... 27 observer.Update(self, UpdateDict) 28 else: 29 if callable(priority): 30 priority = priority(self, UpdateDict) 31 if priority: 32 if priority > self._bids[0]: 33 self._bids = priority, [observer] 34 elif priority == self._bids[0]: 35 self._bids[-1].append(observer) 41 self._GetBid(observer, UpdateDict) 36 42 return BidableSubjectMixin 43 44 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 37 45 38 46 BidableSubject = t_BidableSubject(Subject) trunk/RBJabber/RBJabber/SubjectObserver/Subject.py
r30 r52 38 38 self._observers = [obs for obs in self._observers if obs()] 39 39 return self._observers 40 Observers = property(_ObserverList) 40 41 41 42 def UpdateObservers(self, **kw): … … 47 48 _cachedUpdates, self._cachedUpdates = self._cachedUpdates, {} 48 49 lock = self.Lock() 49 for each in self. _ObserverList():50 for each in self.Observers: 50 51 self.UpdateObserver(each(), _cachedUpdates) 51 52 return 1 trunk/RBJabber/RBJabber/Test.py
r51 r52 21 21 22 22 def _printTypedMessage(subject, UpdateDict): 23 msgType = UpdateDict['index']24 23 value = UpdateDict['message'] 25 24 print 26 print " %s Message from %r" % (msgType,value.from_)25 print "$$$ Message from %r" % (value.from_) 27 26 print value._toPrettyXML() 28 27 print … … 99 98 router = MessageRouterByType(jc) 100 99 obs = SubjectObserver.Observer(_printTypedMessage) 100 obs.Bid = 10 101 101 router.Get('message').AddObserver(obs) 102 102 router.Get('groupchat').AddObserver(obs) 103 router.Get('chat').AddObserver(obs)103 #router.Get('chat').AddObserver(obs) 104 104 router.Get('headline').AddObserver(obs) 105 105
