tendermint/example/python/tmsp/reader.py

57 lines
1.2 KiB
Python
Raw Normal View History

2015-12-06 15:18:13 -08:00
# Simple read() method around a bytearray
2016-01-03 08:35:23 -08:00
2015-12-19 18:31:53 -08:00
class BytesBuffer():
2016-01-03 08:35:23 -08:00
def __init__(self, b):
self.buf = b
self.readCount = 0
def count(self):
return self.readCount
def reset_count(self):
self.readCount = 0
def size(self):
return len(self.buf)
def peek(self):
return self.buf[0]
def write(self, b):
# b should be castable to byte array
self.buf += bytearray(b)
def read(self, n):
if len(self.buf) < n:
print "reader err: buf less than n"
# TODO: exception
return
self.readCount += n
r = self.buf[:n]
self.buf = self.buf[n:]
return r
2015-12-06 15:18:13 -08:00
# Buffer bytes off a tcp connection and read them off in chunks
2016-01-03 08:35:23 -08:00
2015-12-06 15:18:13 -08:00
class ConnReader():
2016-01-03 08:35:23 -08:00
def __init__(self, conn):
self.conn = conn
self.buf = bytearray()
# blocking
def read(self, n):
while n > len(self.buf):
moreBuf = self.conn.recv(1024)
if not moreBuf:
raise IOError("dead connection")
self.buf = self.buf + bytearray(moreBuf)
r = self.buf[:n]
self.buf = self.buf[n:]
return r