From e7f8c6013d777dd5ba10b8d548d2d3db6158d37a Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期四, 08 九月 2022 17:04:27 +0800
Subject: [PATCH] '完善'

---
 server.py |  115 ++++++++++++++++++++++++++++++---------------------------
 1 files changed, 61 insertions(+), 54 deletions(-)

diff --git a/server.py b/server.py
index 2978180..06a4e6a 100644
--- a/server.py
+++ b/server.py
@@ -2,6 +2,7 @@
 import logging
 import socketserver
 import socket
+import threading
 import time
 
 import data_process
@@ -66,58 +67,60 @@
                         __start_time = round(time.time() * 1000)
                         # level2鐩樺彛鏁版嵁
                         day, client, channel, code, datas = l2_data_manager.parseL2Data(_str)
+                        cid, pid = gpcode_manager.get_listen_code_pos(code)
+                        # 鍒ゆ柇鐩爣浠g爜浣嶇疆鏄惁涓庝笂浼犳暟鎹綅缃竴鑷�
+                        if cid is not None and pid is not None and client == int(cid) and channel == int(pid):
+                            try:
+                                # print("L2鏁版嵁鎺ュ彈",day,code,len(datas))
+                                # 鏌ヨ
+                                code_ = gpcode_manager.get_listen_code_by_pos(client, channel)
+                                if code_ != code:
+                                    key = "{}-{}-{}".format(client, channel, code)
 
-                        try:
-                            # print("L2鏁版嵁鎺ュ彈",day,code,len(datas))
-                            # 鏌ヨ
-                            code_ = gpcode_manager.get_listen_code_by_pos(client, channel)
-                            if code_ != code:
-                                key = "{}-{}-{}".format(client, channel, code)
+                                    # 闂撮殧2s
+                                    if key not in self.reset_code_dict or round(
+                                            time.time() * 1000) - self.reset_code_dict[key] > 2000:
 
-                                # 闂撮殧2s
-                                if key not in self.reset_code_dict or round(
-                                        time.time() * 1000) - self.reset_code_dict[key] > 2000:
+                                        self.l2CodeOperate.set_operate_code_state(client, channel, 0)
+                                        self.reset_code_dict[key] = round(time.time() * 1000)
+                                        if code_ is None:
+                                            code_ = ""
+                                        if tool.is_trade_time():
+                                            self.l2CodeOperate.repaire_operate(int(client), int(channel), code_)
+                                else:
+                                    key = "{}-{}".format(client, channel)
+                                    if key not in self.set_operate_code_state_dict or round(
+                                            time.time() * 1000) - self.set_operate_code_state_dict[key] > 1000:
+                                        self.set_operate_code_state_dict[key] = round(time.time() * 1000)
+                                        self.l2CodeOperate.set_operate_code_state(client, channel, 1)
 
-                                    self.l2CodeOperate.set_operate_code_state(client, channel, 0)
-                                    self.reset_code_dict[key] = round(time.time() * 1000)
-                                    if code_ is None:
-                                        code_ = ""
-                                    if tool.is_trade_time():
-                                        self.l2CodeOperate.repaire_operate(int(client), int(channel), code_)
-                            else:
-                                key = "{}-{}".format(client, channel)
-                                if key not in self.set_operate_code_state_dict or round(
-                                        time.time() * 1000) - self.set_operate_code_state_dict[key] > 1000:
-                                    self.set_operate_code_state_dict[key] = round(time.time() * 1000)
-                                    self.l2CodeOperate.set_operate_code_state(client, channel, 1)
+                                if gpcode_manager.is_listen(code):
+                                    l2_data_manager.process_data(code, datas)
+                            except l2_data_manager.L2DataException as l:
+                                # 鍗曚环涓嶇
+                                if l.get_code() == l2_data_manager.L2DataException.CODE_PRICE_ERROR:
+                                    key = "{}-{}-{}".format(client, channel, code)
+                                    if key not in self.l2_data_error_dict or round(
+                                            time.time() * 1000) - self.l2_data_error_dict[key] > 10000:
+                                        # self.l2CodeOperate.repaire_l2_data(code)
+                                        # todo 澶晱鎰熺Щ闄や唬鐮�
+                                        logger_l2_error.warning("code-{} l2鍗曚环閿欒:{}", code, l.msg)
+                                        # 鍗曚环涓嶄竴鑷存椂闇�瑕佺Щ闄や唬鐮侀噸鏂版坊鍔�
+                                        l2_code_operate.L2CodeOperate().remove_l2_listen(code)
+                                        self.l2_data_error_dict[key] = round(time.time() * 1000)
 
-                            if gpcode_manager.is_listen(code):
-                                l2_data_manager.process_data(code, datas)
-                        except l2_data_manager.L2DataException as l:
-                            # 鍗曚环涓嶇
-                            if l.get_code() == l2_data_manager.L2DataException.CODE_PRICE_ERROR:
-                                key = "{}-{}-{}".format(client, channel, code)
-                                if key not in self.l2_data_error_dict or round(
-                                        time.time() * 1000) - self.l2_data_error_dict[key] > 2000:
-                                    self.l2CodeOperate.repaire_l2_data(code)
-                                    self.l2_data_error_dict[key] = round(time.time() * 1000)
-
-                        except Exception as e:
-                            print("寮傚父", str(e))
-                            logging.exception(e)
-                            logger_l2_error.error("鍑洪敊锛歿}".format(str(e)))
-                            logger_l2_error.error("鍐呭锛歿}".format(_str))
-                        finally:
-                            __end_time = round(time.time() * 1000)
-                            # 鍙褰曞ぇ浜�40ms鐨勬暟鎹�
-                            if __end_time - __start_time > 40:
-                                logger_l2_process.info("l2澶勭悊鏃堕棿锛歿}-{}".format(code, __end_time - __start_time));
+                            except Exception as e:
+                                print("寮傚父", str(e))
+                                logging.exception(e)
+                                logger_l2_error.error("鍑洪敊锛歿}".format(str(e)))
+                                logger_l2_error.error("鍐呭锛歿}".format(_str))
+                            finally:
+                                __end_time = round(time.time() * 1000)
+                                # 鍙褰曞ぇ浜�40ms鐨勬暟鎹�
+                                if __end_time - __start_time > 40:
+                                    logger_l2_process.info("l2澶勭悊鏃堕棿锛歿}-{}".format(code, __end_time - __start_time));
                     except:
                         pass
-
-
-
-
                 elif type == 10:
                     # level2浜ゆ槗闃熷垪
                     try:
@@ -126,7 +129,6 @@
                             data_process.saveL2Data(day, code, setData)
                     except:
                         print("寮傚父")
-
                 elif type == 1:
                     # 璁剧疆鑲$エ浠g爜
                     data_list = data_process.parseGPCode(_str)
@@ -138,7 +140,10 @@
                     gpcode_manager.set_gp_list(code_list)
                     # 閲嶆柊璁㈤槄
                     self.server.pipe.send(json.dumps({"type": "resub"}))
-                    sync_target_codes_to_ths()
+                    # 鍚屾鍚岃姳椤虹洰鏍囦唬鐮�
+                    t1 = threading.Thread(target=lambda: sync_target_codes_to_ths())
+                    t1.setDaemon(True)
+                    t1.start()
                 elif type == 2:
                     # 娑ㄥ仠浠g爜
                     codeList = data_process.parseGPCode(_str)
@@ -185,17 +190,18 @@
                             {"code": 0, "data": {"client": int(client_id), "authoritys": json.loads(_authoritys)}})
                     except Exception as e:
                         return_str = data_process.toJson({"code": 1, "msg": str(e)})
+                # 鐜颁环鏇存柊
                 elif type == 40:
                     data = data_process.parse(_str)["data"]
-                    for item in data:
-                        juejin.accpt_price(item["code"], float(item["price"]))
+                    if data is not None:
+                        print("鐜颁环鏁伴噺", len(data))
+                        for item in data:
+                            juejin.accpt_price(item["code"], float(item["price"]))
 
                 elif type == 30:
                     data = data_process.parse(_str)["data"]
                     client_id = data["client"]
-                    if "memery" in data:
-                        mem = data["memery"]
-                        logger_device.info("锛坽}锛夊唴瀛樹娇鐢ㄧ巼锛歿}".format(client_id, mem))
+                    logger_device.info("锛坽}锛夊鎴风淇℃伅锛歿}".format(client_id, json.dumps(data)))
                     data_process.saveClientActive(int(client_id), host)
                     # print("蹇冭烦锛�", client_id)
 
@@ -235,7 +241,8 @@
                 send_msg(client, {"action": "test"})
             except:
                 pass
-
+        # 鐭瀹㈡埛绔唬鐮�
+        l2_code_operate.correct_client_codes()
         time.sleep(5)
 
 

--
Gitblit v1.8.0