import socket from driver.models import DriverConfiguration class Connector: def __init__(self): self.config = DriverConfiguration.get_solo() def __send_data(self, message): resp = b"" # convert to binary if str is received if isinstance(message, str): message = message.encode() with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: sock.connect((self.config.remote_host, self.config.remote_port)) sock.settimeout(self.config.timeout / 1000) # milliseconds sock.sendall(message) while True: try: resp += sock.recv(1024) except socket.timeout: break return resp def passthrough(self, data): return self.__send_data(data) def ops(self, address, data, function=False): if function: message = "".format( address, data["function"], data["state"] ) else: message = "".format( address, data["speed"], data["direction"] ) self.__send_data(message) def infra(self, data): if "track" in data: track = " {}".format(data["track"].upper()) else: track = "" if data["power"]: self.__send_data("<1{}>".format(track)) else: self.__send_data("<0{}>".format(track)) def emergency(self): self.__send_data("")