agrobot_base/Python/raspi/cam_2/pi/protocol.py

35 lines
884 B
Python

import json
MAX_MESSAGE_SIZE = 1024 * 1024 # 1 MB
def decode_message(raw_line: str) -> dict:
if raw_line is None:
raise ValueError("Mensagem ausente")
if len(raw_line) > MAX_MESSAGE_SIZE:
raise ValueError("Mensagem excede tamanho máximo permitido")
raw_line = raw_line.strip()
if not raw_line:
raise ValueError("Mensagem vazia")
try:
data = json.loads(raw_line)
except json.JSONDecodeError as e:
raise ValueError(f"JSON inválido: {e.msg}") from e
if not isinstance(data, dict):
raise ValueError("Mensagem JSON deve ser um objeto")
return data
def encode_message(data: dict) -> bytes:
if not isinstance(data, dict):
raise ValueError("Resposta deve ser um objeto dict")
return (
json.dumps(data, ensure_ascii=False, separators=(",", ":")) + "\n"
).encode("utf-8")