def __init__(self, debug_mode=False, timeout=10.0): self.data_handler = DataHandler() self.connector = SocketHandler(timeout) self.debug = debug_mode self.bot = Bot() self.DEFAULT_TICKS = 2*(1000//50) self.ticks = self.DEFAULT_TICKS
def add(self, data): if not self.actions: self.started = time.time() self.samples += data['samples'] self.duration += data['duration'] self.width += data['width'] self.clean() self.actions.append(data) SocketHandler.on_data(data)
def __init__(self, mainWindow): self.PORT = 8266 # Socket Port self.mainWindow = mainWindow self.FRAME_DECODDER = { 'STA': self.statusReceived, 'SEN': self.sensorsReceived } self.socketHandler = SocketHandler()
def add(self, data): if not self.actions: self.started = time.time() self.samples += data['samples'] self.duration += data['duration'] self.width += data['width'] self.clean() log.info("Adding track info. Currently holding info for %d tracks.", len(self.actions)) self.actions.append(data) SocketHandler.on_segment(data)
class ComHandler: def __init__(self, mainWindow): self.PORT = 8266 # Socket Port self.mainWindow = mainWindow self.FRAME_DECODDER = { 'STA': self.statusReceived, 'SEN': self.sensorsReceived } self.socketHandler = SocketHandler() def isConnected(self): return self.socketHandler.isConnected() def connect(self, ip): self.socketHandler.connect(ip, self.PORT) def disconnect(self): self.socketHandler.disconnect() def checkForData(self): while (self.socketHandler.isConnected()): data = self.socketHandler.receive() self.dataReceived(data) def dataReceived(self, data): dataString = data.decode('utf-8') logging.info('Data Received: ' + dataString) command = dataString.split()[0] self.FRAME_DECODDER[command](dataString) def statusReceived(self, frame): subFrames = frame.split() logging.info('Data Received: ' + subFrames[1]) pass def sensorsReceived(self, frame): subFrames = frame.split() temp = subFrames[1][5:] hum = subFrames[2][4:] eCO2 = subFrames[3][5:] TVOC = subFrames[4][5:] self.mainWindow.updateSensors(temp, hum, eCO2, TVOC) def getStatus(self): data = 'GET STA\r' self.socketHandler.send(data) def setColor(self, r, g, b, i): data = 'SET COL ' + r + ' ' + g + ' ' + b + ' ' + i + '\r' print(data) self.socketHandler.send(data) def setEffect(self, effect): data = 'SET EFE ' + effect + '\r' print(data) self.socketHandler.send(data)
def add(self, data): self.clean() self.actions.append(data) SocketHandler.on_data(data)
class MotherRussia: '''Mother russia functions as the program object''' def __init__(self, debug_mode=False, timeout=10.0): self.data_handler = DataHandler() self.connector = SocketHandler(timeout) self.debug = debug_mode self.bot = Bot() self.DEFAULT_TICKS = 2*(1000//50) self.ticks = self.DEFAULT_TICKS def __enter__(self): return self def __exit__(self, exec_type, value, traceback): if isinstance(value, KeyboardInterrupt): print('\r\rRecieved keyboard interrupt') elif isinstance(value, SystemExit): print('Recieved system exit signal') elif isinstance(value, Exception): print('Exception: ', value) print('Attempting to clean up...') clean_error = self.clean() if isinstance(clean_error, Exception): print('Could not clean up: ', clean_error) else: print('Done') if not self.debug: return True def init(self): socket_error = self.connector.connect() if isinstance(socket_error, Exception): raise socket_error self.connector.send_data('NAME Putin') def run(self): while True: raw_data = self.connector.poll_data() if len(raw_data) == 0: break json_error = self.data_handler.parse_data(raw_data) if isinstance(json_error, ValueError): # The exception will contain the string 'Extra data' if the # raw data it received was incomplete. Therefore, try to # receive new raw data if 'Extra data' in str(json_error): continue else: # In most cases, this error will be 'Expecting value', # because the block of raw data it received was empty raise json_error if self.data_handler.is_dead or self.data_handler.is_end_of_round: self.ticks = self.DEFAULT_TICKS start = time.perf_counter() self.bot.update_state(self.data_handler) self.bot.make_decisions(self.ticks) elapsed_time = (time.perf_counter() - start)*1000 if elapsed_time > 45 and self.ticks > 0.5*(1000//50): self.ticks -= 1 elif elapsed_time < 30 and self.ticks < 4*(1000//50): self.ticks += 1 # print(elapsed_time, self.ticks) while len(self.bot.commands) > 0: command = self.bot.get_command() self.connector.send_data(command) self.clean() def clean(self): try: if self.connector.sock is not None: self.connector.close() except Exception as e: return e