First implementation of the xep_0323 and xep_325 used in IoT systems. Tests are added for stanza and streams
This commit is contained in:
64
sleekxmpp/plugins/xep_0323/timerreset.py
Normal file
64
sleekxmpp/plugins/xep_0323/timerreset.py
Normal file
@@ -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()
|
||||
Reference in New Issue
Block a user