def _process_line(self, line):
        event = Event("all_raw_messages", self.get_server_name(), None, [line])
        self._handle_event(event)

        grp = _rfc_1459_command_regexp.match(line).group

        source = NickMask.from_group(grp("prefix"))
        command = self._command_from_group(grp("command"))
        arguments = message.Arguments.from_group(grp('argument'))
        tags = message.Tag.from_group(grp('tags'))

        if source and not self.real_server_name:
            self.real_server_name = source

        if command == "nick":
            if source.nick == self.real_nickname:
                self.real_nickname = arguments[0]
        elif command == "welcome":
            # Record the nickname in case the client changed nick
            # in a nicknameinuse callback.
            self.real_nickname = arguments[0]
        elif command == "featurelist":
            self.features.load(arguments)

        handler = (
            self._handle_message
            if command in ["privmsg", "notice"]
            else self._handle_other
        )
        handler(arguments, command, source, tags)