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