[Neo-report] r1878 vincent - in /trunk/neo: connection.py protocol.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Mar 1 14:37:51 CET 2010
Author: vincent
Date: Mon Mar 1 14:37:50 2010
New Revision: 1878
Log:
Change back packet buffers to lists.
Modified:
trunk/neo/connection.py
trunk/neo/protocol.py
Modified: trunk/neo/connection.py
==============================================================================
--- trunk/neo/connection.py [iso-8859-1] (original)
+++ trunk/neo/connection.py [iso-8859-1] Mon Mar 1 14:37:50 2010
@@ -246,8 +246,8 @@
def __init__(self, event_manager, handler,
connector = None, addr = None,
connector_handler = None):
- self.read_buf = ""
- self.write_buf = ""
+ self.read_buf = []
+ self.write_buf = []
self.cur_id = 0
self.peer_id = 0
self.event_dict = {}
@@ -295,8 +295,8 @@
self._on_close()
self._on_close = None
self.event_dict.clear()
- self.write_buf = ""
- self.read_buf = ""
+ del self.write_buf[:]
+ del self.read_buf[:]
self._handlers.clear()
def abort(self):
@@ -324,16 +324,21 @@
def analyse(self):
"""Analyse received data."""
+ read_buf = self.read_buf
+ if len(read_buf) == 1:
+ msg = read_buf[0]
+ else:
+ msg = ''.join(self.read_buf)
while True:
# parse a packet
try:
- packet = Packets.parse(self.read_buf)
+ packet = Packets.parse(msg)
if packet is None:
break
except PacketMalformedError, msg:
self.getHandler()._packetMalformed(self, msg)
return
- self.read_buf = self.read_buf[len(packet):]
+ msg = msg[len(packet):]
packet_type = packet.getType()
# Remove idle events, if appropriate packets were received.
@@ -353,6 +358,7 @@
# Skip PONG packets, its only purpose is to drop IdleEvent
# generated upong ping.
self._queue.append(packet)
+ self.read_buf = [msg]
def hasPendingMessages(self):
"""
@@ -388,7 +394,7 @@
logging.debug('Connection %r closed in recv', self.connector)
self._closure()
return
- self.read_buf += data
+ self.read_buf.append(data)
except ConnectorTryAgainException:
pass
except ConnectorConnectionRefusedException:
@@ -410,12 +416,16 @@
if not self.write_buf:
return
try:
- n = self.connector.send(self.write_buf)
+ msg = ''.join(self.write_buf)
+ n = self.connector.send(msg)
if not n:
logging.debug('Connection %r closed in send', self.connector)
self._closure()
return
- self.write_buf = self.write_buf[n:]
+ if n == len(msg):
+ del self.write_buf[:]
+ else:
+ self.write_buf = [msg[n:]]
except ConnectorTryAgainException:
pass
except ConnectorConnectionClosedException:
@@ -436,7 +446,7 @@
was_empty = not bool(self.write_buf)
PACKET_LOGGER.dispatch(self, packet, ' to ')
- self.write_buf += packet.encode()
+ self.write_buf.extend(packet.encode())
if was_empty:
# enable polling for writing.
Modified: trunk/neo/protocol.py
==============================================================================
--- trunk/neo/protocol.py [iso-8859-1] (original)
+++ trunk/neo/protocol.py [iso-8859-1] Mon Mar 1 14:37:50 2010
@@ -267,8 +267,8 @@
""" Encode a packet as a string to send it over the network """
content = self._body
length = PACKET_HEADER_SIZE + len(content)
- return pack(PACKET_HEADER_FORMAT, self.getId(), self._code, length) \
- + content
+ return (pack(PACKET_HEADER_FORMAT, self._id, self._code, length),
+ content)
def __len__(self):
return PACKET_HEADER_SIZE + len(self._body)
More information about the Neo-report
mailing list