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:
parent
fb947f9525
commit
7d616bd3dc
@ -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]
|
||||
|
Loading…
x
Reference in New Issue
Block a user