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:
		@@ -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]
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user