added send queueing to avoid mixed sending

This commit is contained in:
Nathan Fritz 2010-02-15 02:13:44 -08:00
parent 06fa1fcf33
commit 58375955a9
2 changed files with 26 additions and 16 deletions

View file

@ -44,10 +44,10 @@ packages = [ 'sleekxmpp',
'sleekxmpp/xmlstream/matcher',
'sleekxmpp/xmlstream/handler' ]
if sys.version_info < (3, 0):
packages.append('sleekxmpp/xmlstream/tostring26')
else:
packages.append('sleekxmpp/xmlstream/tostring')
#if sys.version_info < (3, 0):
# packages.append('sleekxmpp/xmlstream/tostring26')
#else:
# packages.append('sleekxmpp/xmlstream/tostring')
setup(
name = "sleekxmpp",

View file

@ -66,6 +66,7 @@ class XMLStream(object):
self.stream_footer = "</stream>"
self.eventqueue = queue.Queue()
self.sendqueue = queue.Queue()
self.namespace_map = {}
@ -139,12 +140,17 @@ class XMLStream(object):
for t in range(0, HANDLER_THREADS):
self.__thread['eventhandle%s' % t] = threading.Thread(name='eventhandle%s' % t, target=self._eventRunner)
self.__thread['eventhandle%s' % t].start()
self.__thread['sendthread'] = threading.Thread(name='sendthread', target=self._sendThread)
self.__thread['sendthread'].start()
if threaded:
self.__thread['process'] = threading.Thread(name='process', target=self._process)
self.__thread['process'].start()
else:
self._process()
def schedule(self, seconds, handler, args=None):
threading.Timer(seconds, handler, args).start()
def _process(self):
"Start processing the socket."
firstrun = True
@ -222,7 +228,9 @@ class XMLStream(object):
if event == b'start':
edepth += 1
def sendRaw(self, data):
def _sendThread(self):
while True:
data = self.sendqueue.get(True)
logging.debug("SEND: %s" % data)
try:
self.socket.send(data.encode('utf-8'))
@ -234,7 +242,9 @@ class XMLStream(object):
logging.error("Disconnected. Socket Error.")
traceback.print_exc()
self.disconnect(reconnect=True)
return False
def sendRaw(self, data):
self.sendqueue.put(data)
return True
def disconnect(self, reconnect=False):