Update app_client_blocking.py - using mutable bytearray type as receiving buffer so that the buffer content can be modified inside a method read_to_buffer for DRY. This is equivalent to passing a reference in C/C++ language.

This commit is contained in:
George 2020-03-25 00:07:31 -07:00
parent fb947f9525
commit 7d616bd3dc

View File

@ -94,24 +94,22 @@ def main():
print(f"sending request {repr(message)} to {addr}")
sock.sendall(message)
_recv_buffer = b""
_recv_buffer = bytearray(b"")
def read_to_buffer(sock, length, buf : bytearray):
while len(buf) < length:
data = sock.recv(4096)
buf += data
# read and process protoheader (fixed length of 2 byte in network order)
_jsonheader_len = None
hdrlen = 2
while len(_recv_buffer) < hdrlen:
data = sock.recv(4096)
_recv_buffer += data
read_to_buffer(sock, hdrlen, _recv_buffer)
# process_protoheader()
_jsonheader_len = struct.unpack(">H", _recv_buffer[:hdrlen])[0]
_recv_buffer = _recv_buffer[hdrlen:]
# read and process jsonheader
jsonheader = None
while len(_recv_buffer) < _jsonheader_len:
data = sock.recv(4096)
_recv_buffer += data
read_to_buffer(sock, _jsonheader_len, _recv_buffer)
# process_jsonheader()
jsonheader = _json_decode(_recv_buffer[:_jsonheader_len], "utf-8")
@ -126,11 +124,8 @@ def main():
raise ValueError(f'Missing required header "{reqhdr}".')
# read and process response
response = None
content_len = jsonheader["content-length"]
while len(_recv_buffer) < content_len:
data = sock.recv(4096)
_recv_buffer += data
read_to_buffer(sock, content_len, _recv_buffer)
# process_response():
data = _recv_buffer[:content_len]