From 137122947ce968fa4447e803ceed9f6f4e1d45a5 Mon Sep 17 00:00:00 2001 From: gitea Date: Fri, 10 Jan 2025 12:44:41 +0800 Subject: [PATCH] =?UTF-8?q?xcore=E9=80=9A=E8=AE=AF=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/aio.py | 17 +++++-- code/common/openapi.py | 112 +++++++++++++++++++++++++++-------------- 2 files changed, 85 insertions(+), 44 deletions(-) diff --git a/code/aio.py b/code/aio.py index 99f8164..7f51b1d 100644 --- a/code/aio.py +++ b/code/aio.py @@ -76,7 +76,7 @@ class App: self.om_sub_at = ctk.CTkOptionMenu(self.tabview_top.tab("自动测试"), width=160, dynamic_resizing=False, values=["tool33", "tool66", "tool100", "inertia"], font=self.f_common, text_color="#3C3C3C", button_color="#7B6B5B", fg_color="#8D8D8D") self.label_ip_at = ctk.CTkLabel(self.tabview_top.tab("自动测试"), anchor="e", text="IP", font=self.f_common) self.entry_ip_at = ctk.CTkEntry(self.tabview_top.tab("自动测试"), width=160, textvariable=self.entry_ip_atv, font=self.f_entry, text_color="#818181") - self.btn_conn = ctk.CTkButton(self.tabview_top.tab("自动测试"), text="连接", width=60, font=self.f_segbtn, fg_color="#979DA2", corner_radius=0) + self.btn_conn = ctk.CTkButton(self.tabview_top.tab("自动测试"), text="连接", width=60, font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, cursor="hand2") # self.progressbar_at = ctk.CTkProgressBar(self.tabview_top.tab("自动测试"), width=160, mode="indeterminate") self.label_path_at = ctk.CTkLabel(self.tabview_top.tab("自动测试"), width=50, anchor="e", text="Path", font=self.f_common) self.entry_path_at = ctk.CTkEntry(self.tabview_top.tab("自动测试"), width=80, state="disabled", textvariable=self.entry_path_atv, font=self.f_entry, text_color="#818181") @@ -93,12 +93,12 @@ class App: # ======================================================================== self.text_output = ctk.CTkTextbox(self.tabview_bottom.tab("输出"), height=10, corner_radius=0, wrap="none", font=self.f_text) # ======================================================================== - self.label_logs = ctk.CTkLabel(self.tabview_bottom.tab("日志"), width=80, font=self.f_pager, textvariable=self.label_pages_logs, text_color="blue", bg_color="#DCDCDC") + self.label_logs = ctk.CTkLabel(self.tabview_bottom.tab("日志"), width=80, font=self.f_pager, textvariable=self.label_pages_logs, text_color="blue", bg_color="#DCDCDC", cursor="hand2") self.btn_previous = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="上一页", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_previous_log) self.btn_realtime = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="实时", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_realtime_log) self.btn_next = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="下一页", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__get_next_log) self.btn_load = ctk.CTkButton(self.tabview_bottom.tab("日志"), width=60, text="加载", font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, command=self.__load_log_db) - self.btn_find = ctk.CTkButton(self.tabview_bottom.tab("日志"), text="查找", width=60, font=self.f_segbtn, fg_color="#979DA2", corner_radius=0) + self.btn_find = ctk.CTkButton(self.tabview_bottom.tab("日志"), text="查找", width=60, font=self.f_segbtn, fg_color="#979DA2", corner_radius=0, cursor="hand2") self.entry_keyword = ctk.CTkEntry(self.tabview_bottom.tab("日志"), placeholder_text="[id/level/module] 查找内容", width=60, font=self.f_entry) self.treeview_logs = ttk.Treeview(self.tabview_bottom.tab("日志"), height=1, columns=("id", "time", "level", "module", "content"), style="tv.Treeview", show="headings") self.y_scrollbar_logs = tk.Scrollbar(self.tabview_bottom.tab("日志"), width=30, command=self.treeview_logs.yview) @@ -132,6 +132,10 @@ class App: # ======================================================================== self.__draw() + @staticmethod + def __do_nothing(event): + ... + def __detect_network(self): while True: try: @@ -480,6 +484,7 @@ class App: self.f_toplevel = ("Consolas", 14, "normal") self.f_status = ("Consolas", 12, "bold") + @clibs.db_lock def __quit_preparation(self): os.chdir(clibs.log_path) t = datetime.now().strftime("%Y%m%d%H%M%S") @@ -868,11 +873,12 @@ class App: except Exception as Err: self.btn_conn.configure(state="normal", fg_color="#979DA2") elif self.btn_conn.cget("fg_color") == "#2E8B57": + self.btn_conn.configure(state="disabled") try: # clibs.c_md.close() clibs.c_hr.close() finally: - self.btn_conn.configure(fg_color="#979DA2") + self.btn_conn.configure(state="normal", fg_color="#979DA2") t = threading.Thread(target=conn_or_disconn) t.daemon = True t.start() @@ -937,6 +943,7 @@ class App: self.entry_path_at.bind("", select_path) self.entry_ip_at.bind("", show_popupmenu_ip, add="+") self.btn_conn.bind("", conn_change) + self.btn_conn.bind("", self.__do_nothing, add="+") # ======================================================================== self.tabview_bottom.tab("输出").grid_rowconfigure(0, weight=1) self.tabview_bottom.tab("输出").grid_columnconfigure(0, weight=1) @@ -956,7 +963,7 @@ class App: self.treeview_logs.configure(yscrollcommand=self.y_scrollbar_logs.set) self.treeview_logs.tag_configure("DEBUG", background="#708090") - self.treeview_logs.tag_configure("INFO", background="#F5F5F5") # #43CD80 + self.treeview_logs.tag_configure("INFO", background="#D8F9D2") # #43CD80 F5F5F5 self.treeview_logs.tag_configure("WARNING", background="#EEE8AA") self.treeview_logs.tag_configure("ERROR", background="#CD5C5C") for k, v in self.tv_cols.items(): diff --git a/code/common/openapi.py b/code/common/openapi.py index 8e1e134..e82d507 100644 --- a/code/common/openapi.py +++ b/code/common/openapi.py @@ -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")