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:
Nikos Kouremenos 2005-07-31 17:18:27 +00:00
parent 80b66e13fb
commit f51c2b0f95
1 changed files with 8 additions and 2 deletions

View File

@ -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.