Changeset 52

Show
Ignore:
Timestamp:
03/07/02 00:29:24 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBJabber/RBJabber/MessageRouter.py

    r51 r52  
    22#~ Imports  
    33#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     4 
     5from Foundation.SubjectObserver.Subject import Subject 
     6from Foundation.SubjectObserver.BidableSubject import BiddableLogicMixin 
    47 
    58#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    710#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    811 
    9 class MessageRouterBase
     12class MessageRouterBase(BiddableLogicMixin)
    1013    def __init__(self, JC, MessageMapEntryClass=None): 
    1114        JC.stream.AddObserver('message', self) 
    1215        self._UpdateMap = {} 
    1316        if not MessageMapEntryClass: 
    14             from Foundation.SubjectObserver.Subject import Subject 
    1517            MessageMapEntryClass = Subject 
    1618        self.MessageMapEntryClass = MessageMapEntryClass 
    1719 
    18     def Update(self, subject, UpdateDict): 
     20    def Bid(self, subject, UpdateDict): 
    1921        message = UpdateDict.get('message', None) 
    2022        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) 
    2427 
    2528    def Get(self, index, bCreateSubject=1): 
  • trunk/RBJabber/RBJabber/PresenceMap.py

    r51 r52  
    33#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    44 
     5from Foundation.SubjectObserver.Subject import Subject 
     6from Foundation.SubjectObserver.BidableSubject import BiddableLogicMixin 
    57from JID import * 
    68 
     
    3032#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3133 
    32 class PresenceUpdateMap
     34class PresenceUpdateMap(BiddableLogicMixin)
    3335    def __init__(self, JC, PresenceMapEntryClass=None): 
    3436        JC.stream.AddObserver('presence', self) 
    3537        self._UpdateMap = {} 
    3638        if not PresenceMapEntryClass: 
    37             from Foundation.SubjectObserver.Subject import Subject 
    3839            PresenceMapEntryClass = Subject 
    3940        self.PresenceMapEntryClass = PresenceMapEntryClass 
     
    4647        return self._UpdateIndexXForm(node.from_) 
    4748 
    48     def Update(self, subject, UpdateDict): 
     49    def Bid(self, subject, UpdateDict): 
    4950        presence = UpdateDict.get('presence', None) 
    5051        lstXForms = self._UpdateMapXForm(presence) 
    5152        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) 
    5557 
    5658    def Get(self, index, bCreateSubject=1): 
     
    6971        PresenceUpdateMap.__init__(self, JC, PresenceMapEntryClass=None) 
    7072 
    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  
    1010#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    1111 
     12class 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 
    1229def t_BidableSubject(BaseSubject): 
    13     class BidableSubjectMixin(BaseSubject): 
     30    class BidableSubjectMixin(BaseSubject, BiddableLogicMixin): 
    1431        def UpdateObserversEx(self, kw): 
    1532            self._bids = 0, [] 
     
    2239        def UpdateObserver(self, observer, UpdateDict): 
    2340            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) 
    3642    return BidableSubjectMixin 
     43 
     44#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3745 
    3846BidableSubject = t_BidableSubject(Subject) 
  • trunk/RBJabber/RBJabber/SubjectObserver/Subject.py

    r30 r52  
    3838        self._observers = [obs for obs in self._observers if obs()] 
    3939        return self._observers 
     40    Observers = property(_ObserverList) 
    4041 
    4142    def UpdateObservers(self, **kw): 
     
    4748            _cachedUpdates, self._cachedUpdates = self._cachedUpdates, {} 
    4849            lock = self.Lock() 
    49             for each in self._ObserverList()
     50            for each in self.Observers
    5051                self.UpdateObserver(each(), _cachedUpdates) 
    5152            return 1 
  • trunk/RBJabber/RBJabber/Test.py

    r51 r52  
    2121 
    2222def _printTypedMessage(subject, UpdateDict): 
    23     msgType = UpdateDict['index'] 
    2423    value = UpdateDict['message'] 
    2524    print 
    26     print "%s Message from %r" % (msgType, value.from_) 
     25    print "$$$ Message from %r" % (value.from_) 
    2726    print value._toPrettyXML() 
    2827    print 
     
    9998        router = MessageRouterByType(jc) 
    10099        obs = SubjectObserver.Observer(_printTypedMessage) 
     100        obs.Bid = 10 
    101101        router.Get('message').AddObserver(obs) 
    102102        router.Get('groupchat').AddObserver(obs) 
    103         router.Get('chat').AddObserver(obs) 
     103        #router.Get('chat').AddObserver(obs) 
    104104        router.Get('headline').AddObserver(obs) 
    105105