1
# gozerbot/xmpp/wait.py
5
""" wait for ircevent based on ircevent.CMND """
7
__copyright__ = 'this file is in the public domain'
10
from gozerbot.utils.log import rlog
11
from gozerbot.utils.locking import lockdec
12
import gozerbot.threads.thr as thr
15
from gozerbot.wait import Wait
21
waitlock = thread.allocate_lock()
22
locked = lockdec(waitlock)
26
""" wait object for jabber messages. """
28
def register(self, catch, queue, timeout=15):
30
""" register wait for privmsg. """
32
rlog(1, 'xmpp-wait', 'registering for %s' % catch)
34
self.waitlist.append((catch, queue, self.ticket))
36
thr.start_new_thread(self.dotimeout, (timeout, self.ticket))
41
""" check if <msg> is waited for. """
43
for teller in range(len(self.waitlist)-1, -1, -1):
44
i = self.waitlist[teller]
45
if i[0] == msg.userhost:
48
self.delete(msg.ticket)
49
rlog(10, 'xmpp-wait', 'got response for %s' % i[0])
53
def delete(self, ticket):
55
""" delete wait item with ticket nr. """
57
for itemnr in range(len(self.waitlist)-1, -1, -1):
58
item = self.waitlist[itemnr]
60
item[1].put_nowait(None)
62
del self.waitlist[itemnr]
63
rlog(1, 'xmpp-wait', 'deleted ' + str(ticket))
68
class XMPPErrorWait(XMPPWait):
70
""" wait for jabber errors. """
74
""" check if <msg> is waited for. """
76
if not msg.type == 'error':
81
for teller in range(len(self.waitlist)-1, -1, -1):
82
i = self.waitlist[teller]
83
if i[0] == 'ALL' or i[0] == errorcode:
87
self.delete(msg.ticket)
88
rlog(10,'xmpp-errorwait','got error response for %s' % i[0])