xcore通讯协议完善

This commit is contained in:
2025-01-10 12:44:41 +08:00
parent 6a47310dec
commit 137122947c
2 changed files with 85 additions and 44 deletions

View File

@ -309,15 +309,25 @@ class HmiRequest(object):
self.__half_pkg = b""
self.__half_pkg_flag = False
self.__is_first_frame = True
self.__is_very_first_frame = True
self.__is_debug = True
self.__t_heartbeat = None
self.__t_unpackage = None
self.__t_unpackage_xs = None
self.__t_is_alive = Thread(target=self.__is_alive)
self.__t_is_alive.daemon = True
self.__t_is_alive.start()
time.sleep(3)
self.__socket_conn()
self.__t_heartbeat = Thread(target=self.__heartbeat)
self.__t_heartbeat.daemon = True
self.__t_heartbeat.start()
self.__t_unpackage = Thread(target=self.__unpackage, args=(self.__c,))
self.__t_unpackage.daemon = True
self.__t_unpackage.start()
self.__t_unpackage_xs = Thread(target=self.__unpackage_xs, args=(self.__c_xs,))
self.__t_unpackage_xs.daemon = True
self.__t_unpackage_xs.start()
# self.__t_heartbeat = None
# self.__t_unpackage = None
# self.__t_unpackage_xs = None
# self.__t_is_alive = Thread(target=self.__is_alive)
# self.__t_is_alive.daemon = True
# self.__t_is_alive.start()
# time.sleep(3)
def __is_alive(self):
while not self.__close_hmi:
@ -341,7 +351,7 @@ class HmiRequest(object):
def close(self):
try:
self.__close_hmi = True
# self.__close_hmi = True
self.__is_connected = False
time.sleep(clibs.interval*2)
self.__c.close()
@ -486,42 +496,56 @@ class HmiRequest(object):
self.__is_first_frame = False
elif not self.__is_first_frame: # 不是首帧
if self.__leftovers > 0 and self.__valid_data_length > 0:
self.__is_first_frame = False
self.__response += data[:self.__leftovers]
self.__index = self.__leftovers
self.__valid_data_length -= self.__leftovers
self.__leftovers = 0
if self.__valid_data_length == 0:
if len(data) >= self.__leftovers:
self.__is_first_frame = False
self.__response += data[:self.__leftovers]
self.__index = self.__leftovers
self.__valid_data_length -= self.__leftovers
self.__leftovers = 0
if self.__valid_data_length == 0:
# with open(f"{clibs.log_path}/response.txt", mode="a", encoding="utf-8") as f_res:
# f_res.write(f"{json.loads(self.__response.decode())}" + "\n")
clibs.insert_logdb("DEBUG", "openapi", self.__response.decode())
self.__response = b""
self.__is_first_frame = True
continue # 此时应该重新 get_headers
if len(data[self.__index:]) == 2:
self.__half_frm = data[self.__index:]
self.__index += clibs.MAX_FRAME_SIZE
self.__half_frm_flag = 2
elif len(data[self.__index:]) == 1:
self.__half_frm = data[self.__index:]
self.__index += clibs.MAX_FRAME_SIZE
self.__half_frm_flag = 1
elif len(data[self.__index:]) == 0:
self.__index += clibs.MAX_FRAME_SIZE
self.__half_frm_flag = 0
else:
self.__half_frm_flag = -1
elif len(data) < self.__leftovers:
self.__response += data
self.__leftovers -= len(data)
self.__valid_data_length -= len(data)
self.__index += clibs.MAX_FRAME_SIZE
elif self.__leftovers > 0 and self.__valid_data_length == 0:
if len(data) >= self.__leftovers:
self.__response += data[:self.__leftovers]
self.__index = self.__leftovers
self.__leftovers = 0
# with open(f"{clibs.log_path}/response.txt", mode="a", encoding="utf-8") as f_res:
# f_res.write(f"{json.loads(self.__response.decode())}" + "\n")
clibs.insert_logdb("DEBUG", "openapi", self.__response.decode())
self.__response = b""
self.__is_first_frame = True
continue # 此时应该重新 get_headers
elif len(data) < self.__leftovers:
self.__response += data
self.__leftovers -= len(data)
self.__index += clibs.MAX_FRAME_SIZE
if len(data[self.__index:]) == 2:
self.__half_frm = data[self.__index:]
self.__index += clibs.MAX_FRAME_SIZE
self.__half_frm_flag = 2
elif len(data[self.__index:]) == 1:
self.__half_frm = data[self.__index:]
self.__index += clibs.MAX_FRAME_SIZE
self.__half_frm_flag = 1
elif len(data[self.__index:]) == 0:
self.__index += clibs.MAX_FRAME_SIZE
self.__half_frm_flag = 0
else:
self.__half_frm_flag = -1
elif self.__leftovers > 0 and self.__valid_data_length == 0:
self.__response += data[:self.__leftovers]
self.__index = self.__leftovers
self.__leftovers = 0
# with open(f"{clibs.log_path}/response.txt", mode="a", encoding="utf-8") as f_res:
# f_res.write(f"{json.loads(self.__response.decode())}" + "\n")
clibs.insert_logdb("DEBUG", "openapi", self.__response.decode())
self.__response = b""
self.__is_first_frame = True
elif self.__leftovers == 0 and self.__valid_data_length > 0:
# 1. len(data[self.__index:]) > 2
@ -626,6 +650,16 @@ class HmiRequest(object):
self.__valid_data_length -= len(data[self.__index:])
self.__index += clibs.MAX_FRAME_SIZE
else:
# DEBUG INFO
# if self.__is_debug:
# print(f"12 index = {self.__index}")
# print(f"12 frm_value = {frm_value}")
# print(f"12 leftovers = {self.__leftovers}")
# print(f"12 valid_data_length = {self.__valid_data_length}")
# print(f"12 is_first_frame = {self.__is_first_frame}")
# if self.__valid_data_length < 0 or self.__leftovers > 1024:
# print(f"data = {data}")
# raise Exception("DataError")
clibs.insert_logdb("ERROR", "openapi", "hr-get_response: Will never be here")
raise Exception("WillNeverBeHere")