Changeset 51
- Timestamp:
- 03/06/02 22:42:27 (6 years ago)
- Files:
-
- trunk/RBJabber/RBJabber/JID.py (added)
- trunk/RBJabber/RBJabber/JabberConnection.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/MessageRouter.py (added)
- trunk/RBJabber/RBJabber/PresenceMap.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/Test.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBJabber/RBJabber/JabberConnection.py
r39 r51 6 6 from Foundation import SmartSelect 7 7 from Foundation.ContextApply import WeakInstanceApply 8 from JID import * 8 9 import socket 9 import re10 10 11 11 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 15 15 _xmlJabberHeader = '''<?xml version="1.0" encoding="UTF-8" ?><stream:stream to="%s" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams">''' 16 16 _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))23 17 24 18 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBJabber/RBJabber/PresenceMap.py
r32 r51 3 3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 4 5 import weakref 5 from JID import * 6 6 7 7 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 #~ Classes 9 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 10 9 class PresenceMap :11 class PresenceMapBasic: 10 12 def __init__(self, JC): 11 13 JC.stream.AddObserver('presence', self) … … 14 16 def Update(self, subject, UpdateDict): 15 17 presence = UpdateDict.get('presence', None) 16 self.Map[presence.from_] = presence 18 FromJID = JIDnormalize(presence.from_) 19 self.Map[FromJID] = presence 17 20 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 32 class 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 66 class 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 1 1 from Client import * 2 from PresenceMap import * 2 from PresenceMap import PresenceMap 3 from MessageRouter import MessageRouterByType 3 4 from Foundation.SmartSelect import SmartSelect 4 5 from iqQuery import iqQuery … … 16 17 print 17 18 print "Message from %r" % value.from_ 19 print value._toPrettyXML() 20 print 21 22 def _printTypedMessage(subject, UpdateDict): 23 msgType = UpdateDict['index'] 24 value = UpdateDict['message'] 25 print 26 print "%s Message from %r" % (msgType, value.from_) 18 27 print value._toPrettyXML() 19 28 print … … 88 97 89 98 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) 90 105 91 106 for x in xrange(2): process(1)
