diff options
author | Lance Stout <lancestout@gmail.com> | 2013-09-05 16:26:18 -0700 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2013-09-05 16:26:18 -0700 |
commit | 24c474a9ec018448846756b33716e5ed973bcdf6 (patch) | |
tree | 98c39075cd31f0cc6f0f7a6955c5fb8273436e7a /sleekxmpp/plugins/xep_0323/timerreset.py | |
parent | 6c2fa7a3823e223d59c19e75b89ad86efb544d23 (diff) | |
parent | 8fd3781ef5de85dbec6166d079a579c1374090ec (diff) | |
download | slixmpp-24c474a9ec018448846756b33716e5ed973bcdf6.tar.gz slixmpp-24c474a9ec018448846756b33716e5ed973bcdf6.tar.bz2 slixmpp-24c474a9ec018448846756b33716e5ed973bcdf6.tar.xz slixmpp-24c474a9ec018448846756b33716e5ed973bcdf6.zip |
Merge branch 'xep_0323_325' of git://github.com/joachimlindborg/SleekXMPP into joachimlindborg-xep_0323_325
Conflicts:
sleekxmpp/plugins/__init__.py
Diffstat (limited to 'sleekxmpp/plugins/xep_0323/timerreset.py')
-rw-r--r-- | sleekxmpp/plugins/xep_0323/timerreset.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/sleekxmpp/plugins/xep_0323/timerreset.py b/sleekxmpp/plugins/xep_0323/timerreset.py new file mode 100644 index 00000000..578f1efe --- /dev/null +++ b/sleekxmpp/plugins/xep_0323/timerreset.py @@ -0,0 +1,64 @@ +""" + SleekXMPP: The Sleek XMPP Library + Implementation of xeps for Internet of Things + http://wiki.xmpp.org/web/Tech_pages/IoT_systems + Copyright (C) 2013 Sustainable Innovation, Joachim.lindborg@sust.se, bjorn.westrom@consoden.se + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" +from threading import Thread, Event, Timer +import time + +def TimerReset(*args, **kwargs): + """ Global function for Timer """ + return _TimerReset(*args, **kwargs) + + +class _TimerReset(Thread): + """Call a function after a specified number of seconds: + + t = TimerReset(30.0, f, args=[], kwargs={}) + t.start() + t.cancel() # stop the timer's action if it's still waiting + """ + + def __init__(self, interval, function, args=[], kwargs={}): + Thread.__init__(self) + self.interval = interval + self.function = function + self.args = args + self.kwargs = kwargs + self.finished = Event() + self.resetted = True + + def cancel(self): + """Stop the timer if it hasn't finished yet""" + self.finished.set() + + def run(self): + #print "Time: %s - timer running..." % time.asctime() + + while self.resetted: + #print "Time: %s - timer waiting for timeout in %.2f..." % (time.asctime(), self.interval) + self.resetted = False + self.finished.wait(self.interval) + + if not self.finished.isSet(): + self.function(*self.args, **self.kwargs) + self.finished.set() + #print "Time: %s - timer finished!" % time.asctime() + + def reset(self, interval=None): + """ Reset the timer """ + + if interval: + #print "Time: %s - timer resetting to %.2f..." % (time.asctime(), interval) + self.interval = interval + else: + #print "Time: %s - timer resetting..." % time.asctime() + pass + + self.resetted = True + self.finished.set() + self.finished.clear() |