diff options
author | elie <elie> | 2010-04-20 13:03:08 +0000 |
---|---|---|
committer | elie <elie> | 2010-04-20 13:03:08 +0000 |
commit | df20074873bcf69ba59049cf2dcc13cf17c8f977 (patch) | |
tree | 7d5a71de4bef3a9eb1618a19e52494ab87abe6d3 /pysnmp/carrier/base.py | |
parent | 62ea63d22548e19c0c03a9c737cfeb5a27b83b5e (diff) | |
download | pysnmp-git-df20074873bcf69ba59049cf2dcc13cf17c8f977.tar.gz |
AbstractTransportDispatcher now allows user application registering
multiple timer callbacks each with dedicated call period.
Diffstat (limited to 'pysnmp/carrier/base.py')
-rw-r--r-- | pysnmp/carrier/base.py | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/pysnmp/carrier/base.py b/pysnmp/carrier/base.py index 8b995476..4515be2f 100644 --- a/pysnmp/carrier/base.py +++ b/pysnmp/carrier/base.py @@ -1,13 +1,26 @@ """Abstract I/O dispatcher. Defines standard dispatcher API""" from pysnmp.carrier import error +class TimerCallable: + def __init__(self, cbFun, callInterval): + self.__cbFun = cbFun + self.__callInterval = callInterval + self.__nextCall = 0 + + def __call__(self, timeNow): + if self.__nextCall <= timeNow: + self.__cbFun(timeNow) + self.__nextCall = timeNow + self.__callInterval + + def __cmp__(self, cbFun): + return cmp(self.__cbFun, cbFun) + class AbstractTransportDispatcher: def __init__(self): self.__transports = {} self.__jobs = {} self.__recvCbFun = None - self.__timerCbFuns = [] - self.__timeToGo = 0 + self.__timerCallables = [] def _cbFun(self, incomingTransport, transportAddress, incomingMessage): for name, transport in self.__transports.items(): @@ -38,14 +51,14 @@ class AbstractTransportDispatcher: def unregisterRecvCbFun(self): self.__recvCbFun = None - def registerTimerCbFun(self, timerCbFun): - self.__timerCbFuns.append(timerCbFun) + def registerTimerCbFun(self, timerCbFun, tickInterval=1.0): + self.__timerCallables.append(TimerCallable(timerCbFun, tickInterval)) def unregisterTimerCbFun(self, timerCbFun=None): if timerCbFun is None: - self.__timerCbFuns = [] + self.__timerCallables = [] else: - self.__timerCbFuns.remove(timerCbFun) + self.__timerCallables.remove(timerCbFun) def registerTransport(self, tDomain, transport): if self.__transports.has_key(tDomain): @@ -77,10 +90,8 @@ class AbstractTransportDispatcher: transport.sendMessage(outgoingMessage, transportAddress) def handleTimerTick(self, timeNow): - if self.__timerCbFuns and self.__timeToGo < timeNow: - for timerCbFun in self.__timerCbFuns: - timerCbFun(timeNow) - self.__timeToGo = timeNow + 1 + for timerCallable in self.__timerCallables: + timerCallable(timeNow) def jobStarted(self, jobId): self.__jobs[jobId] = self.__jobs.get(jobId, 0) + 1 |