Example #1
0
    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
Example #2
0
    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)
Example #3
0
    def __init__(self, mainWindow):

        self.PORT = 8266  # Socket Port

        self.mainWindow = mainWindow

        self.FRAME_DECODDER = {
            'STA': self.statusReceived,
            'SEN': self.sensorsReceived
        }

        self.socketHandler = SocketHandler()
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
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)
Example #7
0
 def add(self, data):
     self.clean()
     self.actions.append(data)
     SocketHandler.on_data(data)
Example #8
0
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
Example #9
0
 def add(self, data):
     self.clean()
     self.actions.append(data)
     SocketHandler.on_data(data)