Changeset 86

Show
Ignore:
Timestamp:
04/04/02 21:04:04 (6 years ago)
Author:
sholloway
Message:

Bugfixes
New features for the Jabber code

Files:

Legend:

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

    r66 r86  
    4040from JID import * 
    4141import socket 
     42import select 
    4243 
    4344#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    138139            self._sendData = self._sendData[nSent:] 
    139140 
     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  
    4343 
    4444class State(Subject): 
    45     state = 0 
     45    value = 0 
    4646    _handled = 0 
    4747 
     
    5050        Subject.__init__(self) 
    5151        self._Influxs = [] 
    52         self._StateSubject = Subject() 
     52        self.StateSubject = Subject() 
    5353        self.ReduceFn = ReduceFn 
    5454 
    5555    def __or__(self, other): 
    56         return self.state or other.state 
     56        return int(self) or other 
    5757 
    5858    def __and__(self, other): 
    59         return self.state and other.state 
     59        return int(self) and other 
    6060 
    6161    def __nonzero__(self): 
    62         return self.state and 1 or 0 
     62        return int(self) 
    6363 
    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) 
    7073            if self._handled > 0:  
    7174                self._handled = 0 
    72                 self.state = 0 
     75                self.value = 0 
    7376 
    7477    def SetHandled(self, handled=1): 
     
    7679 
    7780    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: 
    7982            precondition = reduce(self.ReduceFn, self._Influxs) 
    8083            if precondition: 
    81                 lock = self._StateSubject.Lock() 
     84                lock = self.StateSubject.Lock() 
    8285                self.UpdateObservers(precondition=precondition) 
    8386                for each in self._Influxs: 
     
    8689    def AddInflux(self, Influx): 
    8790        self._Influxs.append(Influx) 
    88         Influx._StateSubject.AddObserver(self.CheckInfluxs) 
     91        Influx.StateSubject.AddObserver(self.CheckInfluxs) 
    8992 
    9093    def AddOutflux(self, Outflux): 
  • trunk/RBJabber/RBJabber/Test.py

    r66 r86  
    4141from iqBrowseResponse import iqBrowseResponse 
    4242from iqRosterQuery import iqRosterQuery 
     43from SubscribeApproveResponse import SubscribeApproveResponse 
    4344from pprint import pprint 
    4445import sys 
     
    7172    print 
    7273 
    73 def _printAuth(subject,**UpdateDict): 
     74def _printRegister(subject, iq): 
    7475    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 
     81def _printAuth(subject, iq): 
     82    print 
     83    if iq.type == 'error': 
     84        print 'Authorization: Error -- %s' % iq.error[0] 
     85    else: print 'Authorization: Successful' 
    7686    print 
    7787 
     
    119129        for x in xrange(2): process(1) 
    120130 
     131        dictLogin['callback'] = _printRegister 
     132        dictRegister = dictLogin.copy() 
     133        del dictRegister['resource'] 
     134        #apply(jc.Register, tuple(), dictRegister) 
     135 
    121136        dictLogin['callback'] = _printAuth 
    122137        apply(jc.Authenticate, tuple(), dictLogin) 
     
    149164        iqVersionResponse(jc, 'RuneBlade Foundation Jabber', '0.01') 
    150165        iqBrowseResponse(jc) 
     166        SubscribeApproveResponse(jc) 
    151167        while 1: process(1) 
    152168    except KeyboardInterrupt: 
  • trunk/RBJabber/RBJabber/iqAuthQuery.py

    r66 r86  
    5353        self.JC().stream.AddObserver('iq', self._observer) 
    5454 
    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() 
    6257 
    6358        digest = sha.new(self.JC()._elements[0].id + password).hexdigest() 
  • trunk/RBJabber/RBJabber/iqQuery.py

    r66 r86  
    3636 
    3737import weakref 
     38from Foundation.WeakBind import BindCallable 
    3839from Foundation.SubjectObserver.Subject import Subject 
    3940from Foundation.SubjectObserver.Observer import Observer 
  • trunk/RBJabber/RBJabber/iqRosterQuery.py

    r66 r86  
    5959            bMatch = iq.type in ['result', 'error'] 
    6060            if bMatch: bMatch = iq.Elements(namespace='jabber:iq:roster') and 1 or 0 
    61             return bMatch and 1 or -1 
    62         return -1 
     61            return bMatch and 1 or 0 
     62        return 0 
    6363     
    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
    6767            self.ByJID[JIDjoin(JIDsplit(each.jid)[:2])] = each 
    68         self.UpdateObservers(Roster=self.ByJID) 
     68        if RosterItems: 
     69            self.UpdateObservers(Roster=self.ByJID) 
    6970 
    7071    def Get(self, JID, default=None):