Skip to content

Commit

Permalink
Lower cpu usage
Browse files Browse the repository at this point in the history
  • Loading branch information
suchmememanyskill committed Nov 27, 2024
1 parent 8521664 commit 0c364ec
Showing 1 changed file with 46 additions and 47 deletions.
93 changes: 46 additions & 47 deletions serial/serial_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,58 +105,57 @@ def write(text : str, write : bool):
def main():
while True:
# Read a line from the serial port
if ser.in_waiting > 0:
line = ser.readline().decode('utf-8').strip()
if line.startswith("HTTP_REQUEST") or line.startswith("HTTP_BINARY"):
print(f">>> {line}")
# Parse the parameters
try:
parts = line.split(' ', 3)
timeout_ms, request_type, url_path = int(parts[1]), parts[2], parts[3]
line = ser.readline().decode('utf-8').strip()
if line.startswith("HTTP_REQUEST") or line.startswith("HTTP_BINARY"):
print(f">>> {line}")
# Parse the parameters
try:
parts = line.split(' ', 3)
timeout_ms, request_type, url_path = int(parts[1]), parts[2], parts[3]

ignore_timeout = timeout_ms <= 0
binary = line.startswith("HTTP_BINARY")
ignore_timeout = timeout_ms <= 0
binary = line.startswith("HTTP_BINARY")

if ignore_timeout:
timeout_ms = 1000;
if ignore_timeout:
timeout_ms = 1000;

# Construct the full URL
full_url = f"{PROTOCOL}://{HOSTNAME}:{PORT}{url_path}"
# Construct the full URL
full_url = f"{PROTOCOL}://{HOSTNAME}:{PORT}{url_path}"

# Make the HTTP request based on the type
response = None
if request_type.upper() == "GET":
response = requests.get(full_url, timeout=timeout_ms / 1000)
elif request_type.upper() == "POST":
response = requests.post(full_url, timeout=timeout_ms / 1000)
else:
write("400 Unsupported request type", not ignore_timeout)
continue

# Send response back over serial
if response != None:
if binary:
if response.status_code != 200:
write("00000000", not ignore_timeout)
else:
length = len(response.content)
ser.write(f"{length:>08}".encode('utf-8'))
ser.write(response.content)
print(f"<<< (Binary data of {length} bytes)")
# Make the HTTP request based on the type
response = None
if request_type.upper() == "GET":
response = requests.get(full_url, timeout=timeout_ms / 1000)
elif request_type.upper() == "POST":
response = requests.post(full_url, timeout=timeout_ms / 1000)
else:
write("400 Unsupported request type", not ignore_timeout)
continue

# Send response back over serial
if response != None:
if binary:
if response.status_code != 200:
write("00000000", not ignore_timeout)
else:
status_code = response.status_code
body = response.text.replace('\n', ' ') # Trim and sanitize body for serial
message = f"{status_code} {body}"
write(message, not ignore_timeout)
except (IndexError, ValueError) as e:
write(f"400 Malformed request {str(e)}", not ignore_timeout)
except requests.exceptions.ReadTimeout as e:
print("Request timed out.")
pass
except requests.exceptions.RequestException as e:
write("500 Request failed", not ignore_timeout)
else:
print(f"[LOG] {line}")
length = len(response.content)
ser.write(f"{length:>08}".encode('utf-8'))
ser.write(response.content)
print(f"<<< (Binary data of {length} bytes)")
else:
status_code = response.status_code
body = response.text.replace('\n', ' ') # Trim and sanitize body for serial
message = f"{status_code} {body}"
write(message, not ignore_timeout)
except (IndexError, ValueError) as e:
write(f"400 Malformed request {str(e)}", not ignore_timeout)
except requests.exceptions.ReadTimeout as e:
print("Request timed out.")
pass
except requests.exceptions.RequestException as e:
write("500 Request failed", not ignore_timeout)
else:
print(f"[LOG] {line}")

if __name__ == "__main__":
while True:
Expand Down

0 comments on commit 0c364ec

Please sign in to comment.