Changeset 166
- Timestamp:
- 05/29/02 11:08:13 (6 years ago)
- Files:
-
- trunk/RBJabber/RBJabber/Client.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/SchedulerSubject.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBJabber/RBJabber/Client.py
r164 r166 87 87 self.stream.IncludeSend = kw.get('xmlsend', 0) 88 88 self.stream.IncludeRecv = kw.get('xmlrecv', 0) 89 self.stream.IncludeTick = kw.get('processtick', 0) 89 90 self.information = SubjectObserver.AttributedSubject.AttributedSubject() 90 91 self.information.jid = JID.JID() … … 114 115 if self.stream.IncludeSend and data: self.stream.UpdateObservers(xmlsend=data) 115 116 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 116 123 117 124 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBJabber/RBJabber/SubjectObserver/SchedulerSubject.py
r97 r166 65 65 return self 66 66 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 85 class RecuringSchedulerSubject(SchedulerSubject): 67 86 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 68 87 #~ Update Callbacks … … 72 91 self._LastTime = LastTime 73 92 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 78 100 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) 85 102 86 103 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 101 118 printTime(None, time.time(), time.time()) 102 119 103 TimeSch = SchedulerSubject()120 TimeSch = RecuringSchedulerSubject() 104 121 TimeSch.AddRelativeEvent(1.0, printTime) 105 122 TimeSch.AddRelativeEvent(2.0, printTime) … … 134 151 def gettime(): return nTime 135 152 136 TickSch = SchedulerSubject(gettime)153 TickSch = RecuringSchedulerSubject(gettime) 137 154 TickSch.AddRelativeEvent(5, printTime) 138 155 TickSch.AddRelativeEvent(20, printTime)
