* converted sleekxmpp to Python 3.x
* sleekxmpp no longer spawns threads for callback handlers -- there are now two threads: one for handlers and one for reading. callback handlers can get results from the read queue directly with the "wait" handler which is used in .send() for the reply catching argument.
This commit is contained in:
@@ -11,6 +11,9 @@ class BaseHandler(object):
|
||||
def match(self, xml):
|
||||
return self._matcher.match(xml)
|
||||
|
||||
def prerun(self, payload):
|
||||
self._payload = payload
|
||||
|
||||
def run(self, payload):
|
||||
self._payload = payload
|
||||
|
||||
|
||||
@@ -1,20 +1,26 @@
|
||||
from . import base
|
||||
import threading
|
||||
|
||||
class Callback(base.BaseHandler):
|
||||
|
||||
def __init__(self, name, matcher, pointer, thread=False, once=False):
|
||||
def __init__(self, name, matcher, pointer, thread=False, once=False, instream=False):
|
||||
base.BaseHandler.__init__(self, name, matcher)
|
||||
self._pointer = pointer
|
||||
self._thread = thread
|
||||
self._once = once
|
||||
self._instream = instream
|
||||
|
||||
def prerun(self, payload):
|
||||
base.BaseHandler.prerun(self, payload)
|
||||
if self._instream:
|
||||
self.run(payload, True)
|
||||
|
||||
def run(self, payload):
|
||||
base.BaseHandler.run(self, payload)
|
||||
if self._thread:
|
||||
x = threading.Thread(name="Callback_%s" % self.name, target=self._pointer, args=(payload,))
|
||||
x.start()
|
||||
else:
|
||||
def run(self, payload, instream=False):
|
||||
if not self._instream or instream:
|
||||
base.BaseHandler.run(self, payload)
|
||||
#if self._thread:
|
||||
# x = threading.Thread(name="Callback_%s" % self.name, target=self._pointer, args=(payload,))
|
||||
# x.start()
|
||||
#else:
|
||||
self._pointer(payload)
|
||||
if self._once:
|
||||
self._destroy = True
|
||||
if self._once:
|
||||
self._destroy = True
|
||||
|
||||
@@ -1,20 +1,23 @@
|
||||
from . import base
|
||||
import Queue
|
||||
import queue
|
||||
import logging
|
||||
|
||||
class Waiter(base.BaseHandler):
|
||||
|
||||
def __init__(self, name, matcher):
|
||||
base.BaseHandler.__init__(self, name, matcher)
|
||||
self._payload = Queue.Queue()
|
||||
self._payload = queue.Queue()
|
||||
|
||||
def prerun(self, payload):
|
||||
self._payload.put(payload)
|
||||
|
||||
def run(self, payload):
|
||||
self._payload.put(payload)
|
||||
pass
|
||||
|
||||
def wait(self, timeout=60):
|
||||
try:
|
||||
return self._payload.get(True, timeout)
|
||||
except Queue.Empty:
|
||||
except queue.Empty:
|
||||
return False
|
||||
|
||||
def checkDelete(self):
|
||||
|
||||
@@ -3,5 +3,5 @@ from . callback import Callback
|
||||
|
||||
class XMLCallback(Callback):
|
||||
|
||||
def run(self, payload):
|
||||
Callback.run(self, payload.xml)
|
||||
def run(self, payload, instream=False):
|
||||
Callback.run(self, payload.xml, instream)
|
||||
|
||||
@@ -2,5 +2,5 @@ from . waiter import Waiter
|
||||
|
||||
class XMLWaiter(Waiter):
|
||||
|
||||
def run(self, payload):
|
||||
Waiter.run(self, payload.xml)
|
||||
def prerun(self, payload):
|
||||
Waiter.prerun(self, payload.xml)
|
||||
|
||||
Reference in New Issue
Block a user