Changeset 51

Show
Ignore:
Timestamp:
03/06/02 22:42:27 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

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

    r39 r51  
    66from Foundation import SmartSelect 
    77from Foundation.ContextApply import WeakInstanceApply 
     8from JID import * 
    89import socket 
    9 import re 
    1010 
    1111#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    1515_xmlJabberHeader = '''<?xml version="1.0" encoding="UTF-8" ?><stream:stream to="%s" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams">''' 
    1616_xmlJabberFooter = '''</stream:stream>''' 
    17  
    18 _restrID = '''[\w-]+(?:[\w\.-]+[\w-]+)?''' 
    19 _restrServer = '''[\w-]+(?:[\w\.-]+[\w-]+)?''' 
    20 _restrResource = '''\S+''' 
    21 reJabberURL = re.compile('''(?:jabber://)?(%s)''' % (_restrServer)) 
    22 reJabberJID = re.compile('''(%s)@(%s)(?:/(%s))?''' % (_restrID, _restrServer, _restrResource)) 
    2317 
    2418#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBJabber/RBJabber/PresenceMap.py

    r32 r51  
    33#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    44 
    5 import weakref 
     5from JID import * 
    66 
    77#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     8#~ Classes  
     9#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    810 
    9 class PresenceMap
     11class PresenceMapBasic
    1012    def __init__(self, JC): 
    1113        JC.stream.AddObserver('presence', self) 
     
    1416    def Update(self, subject, UpdateDict): 
    1517        presence = UpdateDict.get('presence', None) 
    16         self.Map[presence.from_] = presence 
     18        FromJID = JIDnormalize(presence.from_) 
     19        self.Map[FromJID] = presence 
    1720 
     21    def __getitem__(self, *args, **kw): 
     22        return apply(self.Map.__getitem__, args, kw) 
     23 
     24    def __setitem__(self, *args, **kw): 
     25        return apply(self.Map.__setitem__, args, kw) 
     26 
     27    def __contains__(self, *args, **kw): 
     28        return apply(self.Map.__contains__, args, kw) 
     29 
     30#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     31 
     32class PresenceUpdateMap: 
     33    def __init__(self, JC, PresenceMapEntryClass=None): 
     34        JC.stream.AddObserver('presence', self) 
     35        self._UpdateMap = {} 
     36        if not PresenceMapEntryClass: 
     37            from Foundation.SubjectObserver.Subject import Subject 
     38            PresenceMapEntryClass = Subject 
     39        self.PresenceMapEntryClass = PresenceMapEntryClass 
     40 
     41    def _UpdateIndexXForm(self, FromJID): 
     42        FromJID = JIDsplitnorm(FromJID) 
     43        return (JIDjoin(FromJID), JIDjoin(FromJID)[:-1]) 
     44 
     45    def _UpdateMapXForm(self, node): 
     46        return self._UpdateIndexXForm(node.from_) 
     47 
     48    def Update(self, subject, UpdateDict): 
     49        presence = UpdateDict.get('presence', None) 
     50        lstXForms = self._UpdateMapXForm(presence) 
     51        for index in lstXForms: 
     52            PresenceSubject = self._UpdateMap.get(index, None) 
     53            if PresenceSubject: 
     54                PresenceSubject.UpdateObservers(presence=presence, index=index) 
     55 
     56    def Get(self, index, bCreateSubject=1): 
     57        index = self._UpdateIndexXForm(index)[0] 
     58        result = self._UpdateMap.get(index, None) 
     59        if result is None and bCreateSubject: 
     60            result = self.PresenceMapEntryClass() 
     61            self._UpdateMap[index] = result 
     62        return result 
     63 
     64#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     65 
     66class PresenceMap(PresenceUpdateMap, PresenceMapBasic): 
     67    def __init__(self, JC, PresenceMapEntryClass=None): 
     68        PresenceMapBasic.__init__(self, JC) 
     69        PresenceUpdateMap.__init__(self, JC, PresenceMapEntryClass=None) 
     70 
     71    def Update(self, subject, UpdateDict): 
     72        PresenceMapBasic.Update(self, subject, UpdateDict) 
     73        PresenceUpdateMap.Update(self, subject, UpdateDict) 
  • trunk/RBJabber/RBJabber/Test.py

    r50 r51  
    11from Client import * 
    2 from PresenceMap import * 
     2from PresenceMap import PresenceMap 
     3from MessageRouter import MessageRouterByType 
    34from Foundation.SmartSelect import SmartSelect 
    45from iqQuery import iqQuery 
     
    1617    print 
    1718    print "Message from %r" % value.from_ 
     19    print value._toPrettyXML() 
     20    print 
     21 
     22def _printTypedMessage(subject, UpdateDict): 
     23    msgType = UpdateDict['index'] 
     24    value = UpdateDict['message'] 
     25    print 
     26    print "%s Message from %r" % (msgType, value.from_) 
    1827    print value._toPrettyXML() 
    1928    print 
     
    8897 
    8998        pm = PresenceMap(jc) 
     99        router = MessageRouterByType(jc) 
     100        obs = SubjectObserver.Observer(_printTypedMessage) 
     101        router.Get('message').AddObserver(obs) 
     102        router.Get('groupchat').AddObserver(obs) 
     103        router.Get('chat').AddObserver(obs) 
     104        router.Get('headline').AddObserver(obs) 
    90105 
    91106        for x in xrange(2): process(1)