initial patch: do not throw all xml at once to parser because that freezes UI until process is finished. TODO: a better way to seperate what is left to seperate and send by smaller chunks to parser
This commit is contained in:
parent
80b66e13fb
commit
f51c2b0f95
1 changed files with 8 additions and 2 deletions
|
@ -32,6 +32,7 @@ class Dispatcher(PlugIn):
|
|||
""" Ancestor of PlugIn class. Handles XMPP stream, i.e. aware of stream headers.
|
||||
Can be plugged out/in to restart these headers (used for SASL f.e.). """
|
||||
def __init__(self):
|
||||
self.in_buffer=''
|
||||
PlugIn.__init__(self)
|
||||
DBG_LINE='dispatcher'
|
||||
self.handlers={}
|
||||
|
@ -110,8 +111,13 @@ class Dispatcher(PlugIn):
|
|||
3) 0 (zero) if underlying connection is closed."""
|
||||
for handler in self._cycleHandlers: handler(self)
|
||||
if self._owner.Connection.pending_data(timeout):
|
||||
data=self._owner.Connection.receive()
|
||||
self.Stream.Parse(data)
|
||||
if not self.in_buffer:
|
||||
try: self.in_buffer=self._owner.Connection.receive()
|
||||
except IOError: return
|
||||
data = self.in_buffer[:1024] # parse first 1 MB
|
||||
self.Stream.Parse(data)
|
||||
self.in_buffer=self.in_buffer[1024:] # parse the rest next time
|
||||
#if data:
|
||||
return len(data)
|
||||
return '0' # It means that nothing is received but link is alive.
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue