def process_data(self, new_data):
        """
        handles incoming data from the `IrcProtocol` connection.
        Main data processing/routing is handled by the _process_line
        method, inherited from `ServerConnection`
        """
        self.buffer.feed(new_data)

        # process each non-empty line after logging all lines
        for line in self.buffer:
            log.debug("FROM SERVER: %s", line)
            if not line:
                continue
            self._process_line(line)