def client_timeout_set(self, conn, name, timeout, func, data=None): clientinfo = self.clients[conn] if name in clientinfo["timeouts"]: irssi.get_script().source_remove(clientinfo["timeouts"][name]) clientinfo["timeouts"][name] = \ irssi.get_script().timeout_add(timeout * 1000, func, data)
def socket_activity(self, fd, condition, sock): if sock != self.socket or sock.fileno() != fd: return False try: (conn, address) = self.socket.accept() except: irssi.prnt("RStatus: Socket error:") irssi.prnt(traceback.format_exc()) self.socket.close() self.socket = None return False if self.debug: irssi.prnt("RStatus: new client connected") if address == '': address = 'UNIX Socket' self.last_set("connect", address) conn.setblocking(False) clientinfo = { "send_queue": "", "recv_buffer": "", "send_messages": False, "watches": {}, "timeouts": {} } clientinfo["watches"]["recv"] = \ irssi.get_script().io_add_watch(conn, self.client_try_recv, conn, irssi.IO_IN) clientinfo["watches"]["err"] = \ irssi.get_script().io_add_watch(conn, self.client_drop_ioerror, conn, irssi.IO_ERR) clientinfo["watches"]["hup"] = \ irssi.get_script().io_add_watch(conn, self.client_drop_ioerror, conn, irssi.IO_HUP) self.clients[conn] = clientinfo self.client_timeout_set(conn, "recv", self.timeout_heartbeat, self.client_drop_timeout, (conn, "RECV Timeout (HB, F)")) self.client_new(conn) return True
def client_sendwatch_add(self, conn, watch): clientinfo = self.clients[conn] assert "send" not in clientinfo["watches"] clientinfo["watches"]["send"] = \ irssi.get_script().io_add_watch(conn, self.client_try_send, conn, irssi.IO_OUT)
def client_drop(self, conn, reason, notify=False): if self.debug: irssi.prnt("RStatus: Dropping client: '{0}'".format(reason)) self.last_set("drop", reason) clientinfo = self.clients[conn] del self.clients[conn] tags = clientinfo["watches"].values() + clientinfo["timeouts"].values() for tag in tags: irssi.get_script().source_remove(tag) if notify and len(clientinfo["send_queue"]) == 0: try: conn.send(json.dumps({"type": "disconnect_notice"}) + "\n") except: self.client_conn_close(conn) else: irssi.get_script().timeout_add(self.timeout_drop_notify * 1000, self.client_conn_close, conn) else: self.client_conn_close(conn)
elif nick not in keys: return 0 send_msg(server, nick, msg, command=command) irssi.signal_stop() return 1 def command_out(command, server, query): return privmsg_out(command, server, query, True) load_keys() irssi.get_script().theme_register([ ('own_msg', irssi.current_theme().get_format('fe-common/core', 'own_msg')), ('own_action', irssi.current_theme().get_format('fe-common/irc', 'own_action')), ('pubmsg', irssi.current_theme().get_format('fe-common/core', 'pubmsg')), ('action_public', irssi.current_theme().get_format('fe-common/irc', 'action_public')) ]) irssi.command_bind('setkey', setkey) irssi.command_bind('listkeys', listkeys) irssi.command_bind('keyx', keyx) irssi.signal_add('message private', privmsg_in) irssi.signal_add('send text', privmsg_out) irssi.signal_add('send command', command_out)