import socket as s from SocketClient import SocketClient from select import select class TCPClient(SocketClient): def Connect(self) -> bool: self.socket = s.socket(s.AF_INET, s.SOCK_STREAM) try: self.socket.connect((self.ip, self.port)) except ConnectionRefusedError: self.logger.fatal("TCP_FATAL_CONNECT %s:%d" % (self.ip, self.port)) return False self.socket.setblocking(False) return True def Reconnect(self) -> bool: self.socket.close() return self.Connect() def Send(self, data: str): try: self.socket.sendall(data.encode()) self.logger.info("TCP_SENT %s" % data) self.Receive() except Exception as ex: self.logger.fatal("TCP_FATAL_SEND %s" % ex) def Receive(self): (incoming, _, _) = select([self.socket], [], [], 0) if incoming: try: data = self.socket.recv(1024) if not data: self.socket.close() self.logger.error("TCP_NO_DATA") return self.logger.info("TCP_SUCCESS %s" % data.decode()) except InterruptedError as ex: self.logger.error("TCP_FAIL %s" % ex) self.Reconnect()