Changeset 86
- Timestamp:
- 04/04/02 21:04:04 (6 years ago)
- Files:
-
- trunk/RBJabber/RBJabber/JabberConnection.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/StateMachine.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/SubscribeApproveResponse.py (added)
- trunk/RBJabber/RBJabber/Test.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/iqAuthQuery.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/iqQuery.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/iqRosterQuery.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBJabber/RBJabber/JabberConnection.py
r66 r86 40 40 from JID import * 41 41 import socket 42 import select 42 43 43 44 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 138 139 self._sendData = self._sendData[nSent:] 139 140 141 def Process(self, timeout=None): 142 lstSelected = select.select(self._NeedsRead() and [self] or [], self._NeedsRead() and [self] or [], self._NeedsRead() and [self] or [], timeout) 143 144 if lstSelected[0]: self._ProcessRead() 145 if lstSelected[1]: self._ProcessWrite() 146 if lstSelected[2]: self._ProcessError() 147 148 return (lstSelected[0] or lstSelected[1] or lstSelected[2]) and 1 or 0 149 trunk/RBJabber/RBJabber/SubjectObserver/StateMachine.py
r83 r86 43 43 44 44 class State(Subject): 45 state = 045 value = 0 46 46 _handled = 0 47 47 … … 50 50 Subject.__init__(self) 51 51 self._Influxs = [] 52 self. _StateSubject = Subject()52 self.StateSubject = Subject() 53 53 self.ReduceFn = ReduceFn 54 54 55 55 def __or__(self, other): 56 return self.state or other.state56 return int(self) or other 57 57 58 58 def __and__(self, other): 59 return self.state and other.state59 return int(self) and other 60 60 61 61 def __nonzero__(self): 62 return self.state and 1 or 062 return int(self) 63 63 64 def SetState(self, state=1): 65 if state != self.state: 66 self.state = state 67 if self.state and not self._Influxs: 68 self.UpdateObservers(precondition=self.state) 69 self._StateSubject.UpdateObservers(state=state) 64 def __int__(self): 65 return self.value 66 67 def SetState(self, value =1): 68 if value != self.value: 69 self.value = value 70 if self.value and not self._Influxs: 71 self.UpdateObservers(precondition=self.value) 72 self.StateSubject.UpdateObservers(state=value) 70 73 if self._handled > 0: 71 74 self._handled = 0 72 self. state = 075 self.value = 0 73 76 74 77 def SetHandled(self, handled=1): … … 76 79 77 80 def CheckInfluxs(self, subject, **kw): 78 if kw.get('state', 0) and not self. state:81 if kw.get('state', 0) and not self.value: 79 82 precondition = reduce(self.ReduceFn, self._Influxs) 80 83 if precondition: 81 lock = self. _StateSubject.Lock()84 lock = self.StateSubject.Lock() 82 85 self.UpdateObservers(precondition=precondition) 83 86 for each in self._Influxs: … … 86 89 def AddInflux(self, Influx): 87 90 self._Influxs.append(Influx) 88 Influx. _StateSubject.AddObserver(self.CheckInfluxs)91 Influx.StateSubject.AddObserver(self.CheckInfluxs) 89 92 90 93 def AddOutflux(self, Outflux): trunk/RBJabber/RBJabber/Test.py
r66 r86 41 41 from iqBrowseResponse import iqBrowseResponse 42 42 from iqRosterQuery import iqRosterQuery 43 from SubscribeApproveResponse import SubscribeApproveResponse 43 44 from pprint import pprint 44 45 import sys … … 71 72 print 72 73 73 def _print Auth(subject,**UpdateDict):74 def _printRegister(subject, iq): 74 75 print 75 print "Authenticated" 76 if iq.type == 'error': 77 print 'Registration: Error -- %s' % iq.error[0] 78 else: print 'Registration: Successful' 79 print 80 81 def _printAuth(subject, iq): 82 print 83 if iq.type == 'error': 84 print 'Authorization: Error -- %s' % iq.error[0] 85 else: print 'Authorization: Successful' 76 86 print 77 87 … … 119 129 for x in xrange(2): process(1) 120 130 131 dictLogin['callback'] = _printRegister 132 dictRegister = dictLogin.copy() 133 del dictRegister['resource'] 134 #apply(jc.Register, tuple(), dictRegister) 135 121 136 dictLogin['callback'] = _printAuth 122 137 apply(jc.Authenticate, tuple(), dictLogin) … … 149 164 iqVersionResponse(jc, 'RuneBlade Foundation Jabber', '0.01') 150 165 iqBrowseResponse(jc) 166 SubscribeApproveResponse(jc) 151 167 while 1: process(1) 152 168 except KeyboardInterrupt: trunk/RBJabber/RBJabber/iqAuthQuery.py
r66 r86 53 53 self.JC().stream.AddObserver('iq', self._observer) 54 54 55 if not self.JC()._elements: 56 from Foundation.SmartSelect import SmartSelect 57 ss = SmartSelect() 58 ss.append(self.JC()) 59 while not self.JC()._elements: 60 ss.Process() 61 del ss 55 while not self.JC()._elements: 56 self.JC().Process() 62 57 63 58 digest = sha.new(self.JC()._elements[0].id + password).hexdigest() trunk/RBJabber/RBJabber/iqQuery.py
r66 r86 36 36 37 37 import weakref 38 from Foundation.WeakBind import BindCallable 38 39 from Foundation.SubjectObserver.Subject import Subject 39 40 from Foundation.SubjectObserver.Observer import Observer trunk/RBJabber/RBJabber/iqRosterQuery.py
r66 r86 59 59 bMatch = iq.type in ['result', 'error'] 60 60 if bMatch: bMatch = iq.Elements(namespace='jabber:iq:roster') and 1 or 0 61 return bMatch and 1 or -162 return -161 return bMatch and 1 or 0 62 return 0 63 63 64 def Update(self, subject, **UpdateDict):65 iq = UpdateDict['iq']66 for each in iq.query[0].item:64 def Update(self, subject, iq): 65 RosterItems = getattr(iq.query[0], 'item', []) 66 for each in RosterItems: 67 67 self.ByJID[JIDjoin(JIDsplit(each.jid)[:2])] = each 68 self.UpdateObservers(Roster=self.ByJID) 68 if RosterItems: 69 self.UpdateObservers(Roster=self.ByJID) 69 70 70 71 def Get(self, JID, default=None):
