import os import sys import json import socket import prot_codec as pc # 定义服务器和客户端 # device: # server # client # proxy # 定义操作类型 # option: # connect # disconnect # data # login # close _tcp_server=None _tcp_client=None class tcp_target(object): def __init__(self,tcp_handler:socket): self.handler=tcp_handler self.state="idle" def recv_handler(self,recv_data:bytearray): global _tcp_client global _tcp_server cmd,data=pc.decode(recv_data) print(cmd.decode('utf-8')) j=json.loads(cmd) if(j["device"]=="client"): if(j["option"]=="login"): if(_tcp_client is not None): _tcp_client.close() _tcp_client=self.handler else: if(_tcp_server is not None): _tcp_server.send(recv_data) if(j["device"]=="server"): if(j["option"]=="login"): if(_tcp_server is not None): _tcp_server.close() _tcp_server=self.handler else: if(_tcp_client is not None): _tcp_client.send(recv_data) # 只要有一个断了所有的都断开 def close(self): cmd={'device':'proxy','option':'close'} data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default') # 这里有可能连接已经断开,无法发送 if(_tcp_client is not None): try: _tcp_client.send(data) except Exception as e: print("target_close:",str(e)) if(_tcp_server is not None): try: _tcp_server.send(data) except Exception as e: print("target_close:",str(e))