Esempio n. 1
0
    def write(self):
        log('write')
        if self.request:
            if not self.response_created:
                self.create_response()

        self._write()
Esempio n. 2
0
def chat_listen():
    global chat_window
    while ui_running:  # Wait on messages from IRC
        try:
            # Wait for new data so that control-C works
            ready = select([irc], [], [], 1)  # 1 second timeout
            if ready[0]:
                data = irc.recv(4096).decode('utf-8')
                log(data)
                if data == 'PING :tmi.twitch.tv\r\n':
                    send(irc, 'PONG :tmi.twitch.tv')
                    continue
                elif JTV_MSG.match(data):
                    m = JTV_MSG.match(data)
                    chat_window.on_chat({}, '', m.group(2))
                elif CHAT_MSG.match(data):
                    m = CHAT_MSG.match(data)
                    line_data = {}
                    for kvp in m.group(1).split(';'):
                        line_data[kvp.split('=')[0]] = kvp.split('=')[1]
                    chat_window.on_chat(line_data, m.group(2), m.group(3))
                elif JOIN_MSG.search(data):
                    for m in JOIN_MSG.finditer(data):
                        if m.group(2) == my_username:
                            on_join(m.group(1))
                elif PART_MSG.search(data):
                    for m in PART_MSG.finditer(data):
                        if m.group(2) == my_username:
                            on_join(m.group(1))
                else:
                    log('Unable to parse message!\n')
        except:
            log_exception()
            sleep(1000)
Esempio n. 3
0
def start_connection(host, port, request):
    addr = (host, port)
    my_logger.log("starting connection to {}".format(addr))
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setblocking(False)
    sock.connect_ex(addr)
    events = selectors.EVENT_READ | selectors.EVENT_WRITE
    message = libclient.Message(sel, sock, addr, request)
    sel.register(sock, events, data=message)

    try:
        while True:
            events = sel.select(timeout=1)
            for key, mask in events:
                message = key.data
                try:
                    message.process_events(mask)
                except Exception:
                    print(
                        "main: error: exception for",
                        f"{message.addr}:\n{traceback.format_exc()}",
                    )
                    message.close()
            # Check for a socket being monitored to continue.
            if not sel.get_map():
                break
    except KeyboardInterrupt:
        print("caught keyboard interrupt, exiting")
    finally:
        pass
 def wrapper(*args, **kwargs):
     t_start = time.time()
     result = step_function(*args, **kwargs)
     t_stop = time.time()
     log(
         logging.INFO,
         '--- Execution time of "{}" function: {:.3f} seconds ---'.format(
             step_function.__name__, t_stop - t_start))
     return result
 def wrapper(*args, **kwargs):
     name = step_function.__name__
     log(
         logging.INFO, "***** Started {}: '{}' *****".format(
             'test' if 'test' in name else 'step', name))
     result = step_function(*args, **kwargs)
     log(
         logging.INFO, "***** Finished {}: '{}' *****".format(
             'test' if 'test' in name else 'step', name))
     return result
Esempio n. 6
0
def load_bttv_global():
    while 1:
        try:
            raw = load(request.urlopen('https://api.betterttv.net/2/emotes'))
            break
        except:
            sleep(5000)
    log('Loaded global BTTV emotes')
    for emote in raw['emotes']:
        emotes[emote[
            'code']] = 'https://cdn.betterttv.net/emote/%s/1x' % emote['id']
Esempio n. 7
0
 def _write(self):
     if self._send_buffer:
         log("sending {} to {}".format(repr(self._send_buffer), self.addr))
         try:
             # Should be ready to write
             sent = self.sock.send(self._send_buffer)
         except BlockingIOError:
             # Resource temporarily unavailable (errno EWOULDBLOCK)
             pass
         else:
             self._send_buffer = self._send_buffer[sent:]
Esempio n. 8
0
def load_bttv_channel(username):
    while 1:
        try:
            raw = load(
                request.urlopen('https://api.beetterttv.net/2/channels/' +
                                username))
            break
        except:
            sleep(5000)
    log('Loaded BTTV emotes for ' + username)
    for emote in raw['emotes']:
        emotes[emote[
            'code']] = 'https://cdn.betterttv.net/emote/%s/1x' % emote['id']
Esempio n. 9
0
def load_ffz_global():
    while 1:
        try:
            raw = load(
                request.urlopen('https://api.frankerfacez.com/v1/set/global'))
            break
        except:
            sleep(5000)
    log('Loaded global FFZ emotes')
    set_id = str(raw['default_sets'][0])
    for emote in raw['sets'][set_id]['emoticons']:
        emotes[emote[
            'name']] = 'https://cdn.frankerfacez.com/emoticon/%s/1' % emote[
                'id']
Esempio n. 10
0
def load_ffz_channel(username):
    while 1:
        try:
            raw = load(
                request.urlopen('https://api.frankerfacez.com/v1/room/' +
                                username))
            break
        except:
            sleep(5000)
    log('Loaded FFZ emotes for ' + username)
    set_id = str(raw['room']['set'])
    for emote in raw['sets'][set_id]['emoticons']:
        emotes[emote[
            'name']] = 'https://cdn.frankerfacez.com/emoticon/%s/1' % emote[
                'id']
Esempio n. 11
0
 def process_response(self):
     content_len = self.jsonheader["content-length"]
     if not len(self._recv_buffer) >= content_len:
         return
     data = self._recv_buffer[:content_len]
     self._recv_buffer = self._recv_buffer[content_len:]
     if self.jsonheader["content-type"] == "text/json":
         encoding = self.jsonheader["content-encoding"]
         self.response = self._json_decode(data, encoding)
         log("received response {} from  {}".format(repr(self.response),
                                                    self.addr))
         self._process_response_json_content()
     else:
         # Binary or unknown content-type
         self.response = data
         print(
             f'received {self.jsonheader["content-type"]} response from',
             self.addr,
         )
         self._process_response_binary_content()
     # Close when response has been processed
     self.close()
Esempio n. 12
0
    def close(self):
        log("closing connection to {}".format(self.addr))

        try:
            self.selector.unregister(self.sock)
        except Exception as e:
            log("error: selector.unregister() exception for {}:{}".format(
                self.addr, repr(e)))

        try:
            self.sock.close()
        except OSError as e:
            log("error: socket.close() exception for {}:{}".format(
                self.addr, repr(e)))
        finally:
            # Delete reference to socket object for garbage collection
            self.sock = None
Esempio n. 13
0
        lsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # Avoid bind() exception: OSError: [Errno 48] Address already in use
        lsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        lsock.bind((host, port))
        lsock.listen()
        print("listening on", (host, port))
        lsock.setblocking(False)
        sel.register(lsock, selectors.EVENT_READ, data=None)

        try:
            while True:
                events = sel.select(timeout=None)
                for key, mask in events:
                    if key.data is None:
                        accept_wrapper(key.fileobj)
                        log('key.data is None')
                    else:
                        log('key.data is NOT None')
                        message = key.data
                        message.set_trial('tony')
                        try:
                            message.process_events(mask)
                        except Exception:
                            print(
                                "main: error: exception for",
                                f"{message.addr}:\n{traceback.format_exc()}",
                            )
                            message.close()
        except KeyboardInterrupt:
            print("caught keyboard interrupt, exiting")
        finally:
Esempio n. 14
0
 def set_trial(self,input):
     log(input)
Esempio n. 15
0
 def _process_response_binary_content(self):
     content = self.response
     log("got result: {}".format(content))