diff options
author | Lance Stout <lancestout@gmail.com> | 2011-06-01 15:10:44 -0700 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2011-06-01 15:10:44 -0700 |
commit | 14693233504383d4df0ed092c870d5d7baea6538 (patch) | |
tree | 40901ed8ff906e8da8eda9d58ec9ffd2687f8248 | |
parent | a81162edd2434756e21d7f9a79d71d770a43db7b (diff) | |
download | slixmpp-14693233504383d4df0ed092c870d5d7baea6538.tar.gz slixmpp-14693233504383d4df0ed092c870d5d7baea6538.tar.bz2 slixmpp-14693233504383d4df0ed092c870d5d7baea6538.tar.xz slixmpp-14693233504383d4df0ed092c870d5d7baea6538.zip |
Cache stanza if sending fails.
The stanza will be sent first once the send queue is reactivated
after session start.
Stanzas sent by skipping the queue will not be cached.
-rw-r--r-- | sleekxmpp/xmlstream/xmlstream.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index 2d72de5f..fd313536 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -192,6 +192,7 @@ class XMLStream(object): self.event_queue = queue.Queue() self.send_queue = queue.Queue() + self.__failed_send_stanza = None self.scheduler = Scheduler(self.event_queue, self.stop) self.namespace_map = {StanzaBase.xml_ns: 'xml'} @@ -1021,16 +1022,21 @@ class XMLStream(object): try: while not self.stop.isSet(): self.session_started_event.wait() - try: - data = self.send_queue.get(True, 1) - except queue.Empty: - continue + if self.__failed_send_stanza is not None: + data = self.__failed_send_stanza + self.__failed_send_stanza = None + else: + try: + data = self.send_queue.get(True, 1) + except queue.Empty: + continue log.debug("SEND: %s" % data) try: self.socket.send(data.encode('utf-8')) except Socket.error as serr: self.event('socket_error', serr) log.warning("Failed to send %s" % data) + self.__failed_send_stanza = data self.disconnect(self.auto_reconnect) except KeyboardInterrupt: log.debug("Keyboard Escape Detected in _send_thread") |