Beispiel #1
0
    def __init__(self):
        Gtk.VBox.__init__(self)

        self.screen = None

        self.factory = ClientFactory([])
        self.factory.connect("signed-on", self._signed_on)
        self.factory.connect("joined", self._joined)
        self.factory.connect("system-message", self._system_message)
        self.factory.connect("user-message", self._user_message)
        self.factory.connect("nickname-changed", self._nickname_changed)
        self.factory.connect("user-nickname-changed",
                             self._user_nickname_changed)
        self.factory.connect("user-joined", self._user_joined)
        self.factory.connect("user-left", self._user_left)
        self.factory.connect("user-quit", self._user_quit)
        self.factory.connect("nicknames-list", self._nicknames)
        self.factory.connect("me-command", self._me_command)
        self.factory.connect("status-message", self._status_message)
        self.factory.connect("topic-changed", self._topic_changed)
        self.factory.connect("mode-changed", self._mode_changed)

        self.afk_manager = AFKManager()
        self.afk_manager.connect("user-afk", self._user_afk)
        self.afk_manager.connect("user-back", self._user_back)

        self.channel_screen = NewChannelScreen()
        self.channel_screen.connect("log-in", self._log_in)
        self.channel_screen.connect("new-channel", self._new_channel)
        self.channel_screen.connect("cancel", self._screen_changed,
                                    Screen.CHAT)
        self.chat_screen = Gtk.HBox()

        self.channels_listbox = ChannelsListBox()
        self.channels_listbox.connect("channel-selected",
                                      self._channel_selected)
        self.channels_listbox.connect("channel-removed", self._channel_removed)
        self.chat_screen.pack_start(self.channels_listbox, False, False, 0)

        self.chat_box = ChatBox()
        self.chat_box.connect("send-message", self._send_message)
        self.chat_box.connect("command", self.run_command)
        self.chat_box.connect("change-nickname", self._change_nickname)
        self.chat_box.connect("query", self._query)
        self.chat_box.connect("change-topic", self._change_topic)
        self.chat_screen.pack_start(self.chat_box, True, True, 0)

        self.set_screen(Screen.NEW_CHANNEL)
Beispiel #2
0
 def __init__(self,
              default_filter=None,
              client=None,
              entity=None,
              exit_on_bad_request=False):
     super(Resources, self).__init__()
     self.entities = self.__class__.__name__
     self.entity = entity or self.to_singular(self.entities)
     self.entity_l = self.entity.lower()
     self.default_filter = default_filter or {}
     self.client = client or ClientFactory().new_client()
     self.exit_on_bad_request = exit_on_bad_request
    def __init__(self):
        Gtk.VBox.__init__(self)

        self.screen = None

        self.factory = ClientFactory([])
        self.factory.connect("signed-on", self._signed_on)
        self.factory.connect("joined", self._joined)
        self.factory.connect("system-message", self._system_message)
        self.factory.connect("user-message", self._user_message)
        self.factory.connect("nickname-changed", self._nickname_changed)
        self.factory.connect("user-nickname-changed", self._user_nickname_changed)
        self.factory.connect("user-joined", self._user_joined)
        self.factory.connect("user-left", self._user_left)
        self.factory.connect("user-quit", self._user_quit)
        self.factory.connect("nicknames-list", self._nicknames)
        self.factory.connect("me-command", self._me_command)
        self.factory.connect("status-message", self._status_message)
        self.factory.connect("topic-changed", self._topic_changed)
        self.factory.connect("mode-changed", self._mode_changed)

        self.afk_manager = AFKManager()
        self.afk_manager.connect("user-afk", self._user_afk)
        self.afk_manager.connect("user-back", self._user_back)

        self.channel_screen = NewChannelScreen()
        self.channel_screen.connect("log-in", self._log_in)
        self.channel_screen.connect("new-channel", self._new_channel)
        self.channel_screen.connect("cancel", self._screen_changed, Screen.CHAT)
        self.chat_screen = Gtk.HBox()

        self.channels_listbox = ChannelsListBox()
        self.channels_listbox.connect("channel-selected", self._channel_selected)
        self.channels_listbox.connect("channel-removed", self._channel_removed)
        self.chat_screen.pack_start(self.channels_listbox, False, False, 0)

        self.chat_box = ChatBox()
        self.chat_box.connect("send-message", self._send_message)
        self.chat_box.connect("command", self.run_command)
        self.chat_box.connect("change-nickname", self._change_nickname)
        self.chat_box.connect("query", self._query)
        self.chat_box.connect("change-topic", self._change_topic)
        self.chat_screen.pack_start(self.chat_box, True, True, 0)

        self.set_screen(Screen.NEW_CHANNEL)
Beispiel #4
0
# Disable running the uncompressed soxy, it is no longer needed.
#args = ['./soxy/soxy', master_config.get('cert'), master_config.get('key'), str(master_config.getint('port')), os.getcwd() + '/collect-master.sock']
#logging.debug('Starting proxy with: %s', args)
#reactor.spawnProcess(Socat(), './soxy/soxy', args=args, env=os.environ)
args = [
    './soxy/soxy',
    master_config.get('cert'),
    master_config.get('key'),
    master_config.get('ca'),
    str(master_config.getint('port_compression')),
    os.getcwd() + '/collect-master.sock', 'compress'
]
logging.debug('Starting proxy with: %s', args)
reactor.spawnProcess(Socat(), './soxy/soxy', args=args, env=os.environ)

endpoint.listen(
    ClientFactory(plugins, frozenset(master_config.get('fastpings').split())))
logging.info('Init done')

reactor.run()

logging.info('Finishing up')
pool.stop()
if socat:
    soc = socat
    socat = None
    soc.signalProcess('TERM')
activity.shutdown()
logging.info('Shutdown done')
Beispiel #5
0
 def __init__(self, name, idx, numMoves):
     ClientFactory.__init__(self, name)
     self.idx = idx
     self.numMoves = numMoves
Beispiel #6
0
class PolariCanvas(Gtk.VBox):

    def __init__(self):
        Gtk.VBox.__init__(self)

        self.screen = None

        self.factory = ClientFactory([])
        self.factory.connect("signed-on", self._signed_on)
        self.factory.connect("joined", self._joined)
        self.factory.connect("system-message", self._system_message)
        self.factory.connect("user-message", self._user_message)
        self.factory.connect("nickname-changed", self._nickname_changed)
        self.factory.connect("user-nickname-changed", self._user_nickname_changed)
        self.factory.connect("user-joined", self._user_joined)
        self.factory.connect("user-left", self._user_left)
        self.factory.connect("user-quit", self._user_quit)
        self.factory.connect("nicknames-list", self._nicknames)
        self.factory.connect("me-command", self._me_command)
        self.factory.connect("status-message", self._status_message)
        self.factory.connect("topic-changed", self._topic_changed)
        self.factory.connect("mode-changed", self._mode_changed)

        self.afk_manager = AFKManager()
        self.afk_manager.connect("user-afk", self._user_afk)
        self.afk_manager.connect("user-back", self._user_back)

        self.channel_screen = NewChannelScreen()
        self.channel_screen.connect("log-in", self._log_in)
        self.channel_screen.connect("new-channel", self._new_channel)
        self.channel_screen.connect("cancel", self._screen_changed, Screen.CHAT)
        self.chat_screen = Gtk.HBox()

        self.channels_listbox = ChannelsListBox()
        self.channels_listbox.connect("channel-selected", self._channel_selected)
        self.channels_listbox.connect("channel-removed", self._channel_removed)
        self.chat_screen.pack_start(self.channels_listbox, False, False, 0)

        self.chat_box = ChatBox()
        self.chat_box.connect("send-message", self._send_message)
        self.chat_box.connect("command", self.run_command)
        self.chat_box.connect("change-nickname", self._change_nickname)
        self.chat_box.connect("query", self._query)
        self.chat_box.connect("change-topic", self._change_topic)
        self.chat_screen.pack_start(self.chat_box, True, True, 0)

        self.set_screen(Screen.NEW_CHANNEL)

    def set_screen(self, screen):
        if screen == self.screen:
            return

        self.screen = screen

        if self.screen == Screen.CHAT:
            if self.channel_screen.get_parent() == self:
                self.remove(self.channel_screen)

            self.pack_start(self.chat_screen, True, True, 0)

        elif self.screen == Screen.NEW_CHANNEL:
            if self.chat_screen.get_parent() == self:
                self.remove(self.chat_screen)

            self.pack_start(self.channel_screen, True, True, 0)

        self.show_all()

    def _send_message(self, widget, channel, message):
        self.send_message(channel, message)

    def send_message(self, channel, message):
        self.factory.client.msg(channel, message)

    def _change_nickname(self, widget, new_nickname):
        self.change_nickname(new_nickname)

    def change_nickname(self, new_nickname):
        self.factory.client.set_nickname(new_nickname)

    def _query(self, widget, nickname):
        self.query(nickname)

    def query(self, nickname):
        self.new_channel(nickname, add_hash=False)

    def _change_topic(self, widget, channel, topic):
        self.change_topic(channel, topic)

    def change_topic(self, channel, topic):
        self.factory.client.topic(channel, topic)

    def run_command(self, widget, channel, command, parameters=""):
        if command == "/join":
            for channel in parameters.split(" "):
                if channel.strip() != "":
                    self.new_channel(channel)

        elif command == "/msg":
            if parameters.split(" ")[0].lower() != "nickserv":
                nickname = parameters.split(" ")[0]
                message = parameters[len(nickname) + 1:]

                if nickname not in self.chat_box.channels:
                    self.new_channel(nickname, add_hash=False)

                self.send_message(nickname, message)
                self.chat_box.add_message_to_view(nickname, self.factory.client.get_nickname(), message, force=True)

            else:
                nickserv = parameters.split(" ")[0]
                action = parameters.split(" ")[1].lower()

                if action == "identify" and len(parameters.split(" ")) == 3:
                    password = parameters.split(" ")[2]
                    self.send_message("NickServ", "identify %s" % password)

                elif action == "identify" and len(parameters.split(" ")) == 4:
                    nickname = parameters.split(" ")[2]
                    password = parameters.split(" ")[3]
                    self.send_message("NickServ", "identify %s %s" % (nickname, password))

        elif command == "/query":
            nickname = parameters.split(" ")[0]

            if nickname not in self.chat_box.channels:
                self.new_channel(nickname, add_hash=False)

        elif command == "/nick":
            self.change_nickname(parameters)

        elif command == "/names":
            self.factory.client.ask_for_names(channel)

        elif command == "/me":
            self.factory.client.me(channel, parameters)
            self._me_command(None, channel, self.factory.client.get_nickname(), parameters)

        elif command == "/topic":
            self.change_topic(channel, parameters)

        elif command == "/away":
            self.factory.client.set_away(True, parameters)

        elif command == "/back":
            self.factory.client.set_away(False)

    def _log_in(self, widget, nick, host, channel, port):
        self.set_screen(Screen.CHAT)
        self.chat_box.set_nickname(nick)
        self.channel_screen.set_logged(True)

        self.factory.protocol.nickname = nick
        if channel.strip() != "":
            self.new_channel(channel)

        self.chat_box.add_system_message(STATUS_CHANNEL, _("Logging in, please wait"))
        self.factory.start_connection(host, port)

    def _new_channel(self, widget, channel):
        if channel.strip() != "":
            self.new_channel(channel)

    def _channel_removed(self, widget, channel):
        self.factory.remove_channel(channel)
        self.chat_box.remove_channel(channel)

        if len(self.factory.channels) == 0:
            self.set_screen(Screen.NEW_CHANNEL)

    def new_channel(self, channel, add_hash=True, show=None):
        self.set_screen(Screen.CHAT)

        if add_hash and not channel.startswith("#"):
            channel = "#" + channel

        if channel in self.chat_box.channels:
            self.chat_box.add_system_message(channel, _("You've already joined %s") % channel)
            return

        self.chat_box.add_channel(channel)
        self.channels_listbox.add_channel(channel, show=show)
        self.factory.add_channel(channel)
        self.chat_box.switch_channel(channel)

    def _channel_selected(self, listbox, channel):
        self.chat_box.switch_channel(channel)

    def _screen_changed(self, widget, screen):
        self.set_screen(screen)

    def _signed_on(self, factory):
        self.chat_box.entry.set_sensitive(True)
        self.chat_box.nicker.set_sensitive(True)
        self.channels_listbox.change_spinner(STATUS_CHANNEL, False)

    def _joined(self, factory, channel):
        if channel not in self.chat_box.channels:
            channel = channel[1:]  # Isn't a channel, is a user (removing #)

        else:
            self.chat_box.add_system_message(channel, _("Joined to: %s") % channel)

        self.channels_listbox.change_spinner(channel, False)

    def _system_message(self, factory, channel, message):
        if channel == CURRENT_CHANNEL:
            channel = self.chat_box.current_channel

        if channel == ALL_CHANNELS:
            for channel in self.chat_box.channels:
                self.chat_box.add_system_message(channel, message)

        else:
            self.chat_box.add_system_message(channel, message)

    def _user_message(self, factory, channel, nickname, message):
        if channel == self.factory.client.get_nickname() and nickname not in self.chat_box.channels:
            self.new_channel(nickname, add_hash=False, show=nickname)

        if channel != self.factory.client.get_nickname():  # Channel message
            self.chat_box.message_recived(channel, nickname, message)

        else:  # Direct message
            self.chat_box.message_recived(nickname, nickname, message)

        self.afk_manager.start_counting(nickname, restart=True)

    def _nickname_changed(self, factory, nickname):
        self.chat_box.set_nickname(nickname)

    def _user_nickname_changed(self, factory, old_nick, new_nick):
        for channel in self.chat_box.channels:
            nicknames = self.chat_box.nicks[channel]
            if old_nick in nicknames:
                self.chat_box.add_system_message(channel, _("{old_nick} has changed nick to {new_nick}").format(old_nick, new_nick))
                self.chat_box.remove_nickname(channel, old_nick)
                self.chat_box.add_nickname(channel, new_nick)

                if old_nick == self.chat_box.nick:
                    self.chat_box.set_nickname(new_nick)

    def _user_joined(self, factory, channel, nickname):
        self.chat_box.add_system_message(channel, _("{nickname} joined.").format(nickname=nickname))
        self.chat_box.add_nickname(channel, nickname)
        self.afk_manager.start_counting(nickname, restart=False)

    def _user_left(self, factory, channel, nickname):
        self.chat_box.add_system_message(channel, _("{nickname} has left.").format(nickname=nickname))
        self.chat_box.remove_nickname(channel, nickname)
        self.afk_manager.remove_nickname(nickname)

    def _user_quit(self, factory, nickname, message):
        for channel in self.chat_box.channels:
            nicknames = self.chat_box.nicks[channel]
            if nickname in nicknames:
                self.chat_box.add_system_message(channel, _("{nickname} has quit. {message}").format(nickname=nickname, message=message))

        self.chat_box.remove_nickname_from_all_channels(nickname)
        self.afk_manager.remove_nickname(nickname)

    def _user_afk(self, manager, nickname):
        self.chat_box.set_user_afk(nickname, True)

    def _user_back(self, manager, nickname):
        self.chat_box.set_user_afk(nickname, False)

    def _nicknames(self, factory, channel, nicknames):
        self.set_nicknames(channel, nicknames.split(" "))

    def set_nicknames(self, channel, nicknames):
        self.chat_box.set_nicknames(channel, nicknames)

        for nickname in nicknames:
            if "@" in nickname:
                nickname, usertype = nickname.split("@")

            self.afk_manager.start_counting(nickname, restart=False)

    def _me_command(self, factory, channel, nickname, message):
        self.chat_box.add_system_message(channel, _(" * {nickname} {message}").format(nickname=nickname, message=message))

    def _status_message(self, factory, message):
        self.chat_box.add_system_message(STATUS_CHANNEL, message)

    def _topic_changed(self, factory, channel, topic):
        self.chat_box.set_topic(channel, topic)

    def _mode_changed(self, factory, channel, usertype, nickname):
        if channel == CURRENT_CHANNEL:
            channel = self.chat_box.current_channel

        self.chat_box.set_user_mode(channel, usertype, nickname)
Beispiel #7
0
 def _install(self):
     self._factory = ClientFactory(self._plugin)
     reactor.runReturn()
     return True
Beispiel #8
0
class Network(Module):
    """
    The network module, responsible for all interactions with the server.
    """
    def __init__(self, plugin):
        super(Network, self).__init__(plugin)

        self._host = ''
        self._port = 0
        self._factory = None
        self._connector = None

    @property
    def host(self):
        """
        Get the hostname of the server.

        :return: the host
        """
        return self._host

    @property
    def port(self):
        """
        Get the port of the server.

        :return: the port
        """
        return self._port

    @property
    def connected(self):
        """
        Return if we are connected to any server.

        :return: if connected
        """
        return self._installed and self._factory.isConnected()

    def _install(self):
        self._factory = ClientFactory(self._plugin)
        reactor.runReturn()
        return True

    def _uninstall(self):
        self.disconnect()
        reactor.stop()
        return True

    def connect(self, host, port):
        """
        Connect to the specified host and port.

        :param host: the host to connect to
        :param port: the port to connect to
        """
        # Make sure we're not already connected
        if self.connected:
            return

        # Do the actual connection process
        logger.info("Connecting to %s:%d..." % (host, port))
        self._host, self._port = host, port
        self._connector = reactor.connectTCP(host, port, self._factory)

        # Notify the plugin of the connection
        self._plugin.notifyConnecting()

    def disconnect(self):
        """
        Disconnect from the current server.
        """
        # Make sure we're actually connected
        if not self.connected:
            return

        # Do the actual disconnection process
        logger.info("Disconnecting...")
        self._host, self._port = '', 0
        if self._connector:
            self._connector.disconnect()

    def sendPacket(self, packet):
        """
        Send a packet to the server.

        :param packet: the packet to send
        :return: a deferred of the reply
        """
        if self.connected:
            return self._factory.sendPacket(packet)
        return None
Beispiel #9
0
 def connect_to_server(self, ip, port):
     reactor.connectTCP(ip, port, ClientFactory(self))
Beispiel #10
0
import random
from client import ClientFactory
from twisted.internet import reactor

name = "Bob{}".format(random.randint(0, 999))

f = ClientFactory(name, debug=True)
reactor.connectTCP("localhost", 8023, f)
reactor.run()