Changeset 166

Show
Ignore:
Timestamp:
05/29/02 11:08:13 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

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

    r164 r166  
    8787        self.stream.IncludeSend = kw.get('xmlsend', 0) 
    8888        self.stream.IncludeRecv = kw.get('xmlrecv', 0) 
     89        self.stream.IncludeTick = kw.get('processtick', 0) 
    8990        self.information = SubjectObserver.AttributedSubject.AttributedSubject() 
    9091        self.information.jid = JID.JID() 
     
    114115        if self.stream.IncludeSend and data: self.stream.UpdateObservers(xmlsend=data) 
    115116        return self.__super._SocketSend(data) 
     117 
     118    def _NeedsRead(self, *args, **kw): 
     119        """Overrides SmartSelect mechanism to signal stream processtick events.""" 
     120        result = self.__super._NeedsRead(*args, **kw) 
     121        if self.stream.IncludeTick and result: self.stream.UpdateObservers(processtick=1) 
     122        return result 
    116123 
    117124    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBJabber/RBJabber/SubjectObserver/SchedulerSubject.py

    r97 r166  
    6565        return self 
    6666 
     67    def Process(self, Time=None, LastTime=None): 
     68        if Time is None: Time = self._TimeFn() 
     69        LastTime, self._LastTime = self._LastTime, Time 
     70        return self.ProcessTimeWindow(LastTime, Time) 
     71 
     72    def ProcessTimeWindow(self, StartTime, StopTime): 
     73        result = [] 
     74        for each in self._events: 
     75            if each[0] < StartTime: pass 
     76            elif each[0] <= StopTime: 
     77                if each[1]: each[1](self, StopTime, each[0]) 
     78            else: result.append(each) 
     79 
     80        self._events = result 
     81        return self._events and (self._events[-1][0] > StopTime) 
     82 
     83#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     84 
     85class RecuringSchedulerSubject(SchedulerSubject): 
    6786    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6887    #~ Update Callbacks 
     
    7291        self._LastTime = LastTime 
    7392 
    74     def Process(self, Time=None, LastTime=None): 
    75         if Time is None: Time = self._TimeFn() 
    76         LastTime, self._LastTime = self._LastTime, Time 
    77         return self.ProcessTimeWindow(LastTime, Time) 
     93    def ProcessTimeWindow(self, StartTime, StopTime): 
     94        result = [] 
     95        for each in self._events: 
     96            if each[0] < StartTime: continue 
     97            elif each[0] <= StopTime: 
     98                if each[1]: each[1](self, StopTime, each[0]) 
     99            else: break 
    78100 
    79     def ProcessTimeWindow(self, StartTime, StopTime): 
    80         lstEvents = [x for x in self._events if StartTime < x[0] <= StopTime] 
    81         for EventTime, EventCallback in lstEvents: 
    82             if EventCallback: 
    83                 EventCallback(self, StopTime, EventTime) 
    84         return self._events[-1][0] > StopTime 
     101        return self._events and (self._events[-1][0] > StopTime) 
    85102 
    86103#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    101118    printTime(None, time.time(), time.time()) 
    102119 
    103     TimeSch = SchedulerSubject() 
     120    TimeSch = RecuringSchedulerSubject() 
    104121    TimeSch.AddRelativeEvent(1.0, printTime) 
    105122    TimeSch.AddRelativeEvent(2.0, printTime) 
     
    134151    def gettime(): return nTime 
    135152     
    136     TickSch = SchedulerSubject(gettime) 
     153    TickSch = RecuringSchedulerSubject(gettime) 
    137154    TickSch.AddRelativeEvent(5, printTime) 
    138155    TickSch.AddRelativeEvent(20, printTime)