| | |
| | | import threading |
| | | import time |
| | | |
| | | from utils import tool |
| | | |
| | | |
| | | class ClientSocketManager: |
| | | # 客户端类型 |
| | |
| | | if _type == cls.CLIENT_TYPE_TRADE: |
| | | if _type in cls.socket_client_dict: |
| | | # 根据排序活跃时间排序 |
| | | client_list = sorted(cls.socket_client_dict[_type], key=lambda x: cls.active_client_dict.get(x[0]) if x[0] in cls.active_client_dict else 0, |
| | | client_list = sorted(cls.socket_client_dict[_type], key=lambda x: cls.active_client_dict.get(x[0]) if x[ |
| | | 0] in cls.active_client_dict else 0, |
| | | reverse=True) |
| | | for d in client_list: |
| | | if d[0] in cls.socket_client_lock_dict: |
| | |
| | | for d in cls.socket_client_dict[t]: |
| | | if d[0] == rid: |
| | | cls.socket_client_dict[t].remove(d) |
| | | try: |
| | | d[1].close() |
| | | except: |
| | | pass |
| | | break |
| | | |
| | | elif type(cls.socket_client_dict[t]) == tuple: |
| | | if cls.socket_client_dict[t][0] == rid: |
| | | cls.socket_client_dict.pop(t) |
| | | try: |
| | | t[1].close() |
| | | except: |
| | | pass |
| | | break |
| | | |
| | | # 心跳信息 |
| | |
| | | for k in cls.active_client_dict.keys(): |
| | | if time.time() - cls.active_client_dict[k] > 20: |
| | | # 心跳时间间隔20s以上视为无效 |
| | | cls.del_client(k) |
| | | cls.del_client(k) |
| | | |
| | | @classmethod |
| | | def list_client(cls): |
| | | _type = cls.CLIENT_TYPE_TRADE |
| | | client_list = sorted(cls.socket_client_dict[_type], |
| | | key=lambda x: cls.active_client_dict.get(x[0]) if x[0] in cls.active_client_dict else 0, |
| | | reverse=True) |
| | | fdata = [] |
| | | for client in client_list: |
| | | active_time = cls.active_client_dict.get(client[0]) |
| | | if active_time is None: |
| | | active_time = 0 |
| | | active_time = tool.to_time_str(int(active_time)) |
| | | fdata.append( |
| | | (client[0], cls.socket_client_lock_dict[client[0]].locked(),active_time)) |
| | | return fdata |
| | | |