Handle an incoming event.

        Returns True if further messages should be received, False otherwise
        (it should quit, that is).

        TODO: Move the content of this function into `_handle_one_message`.
        This class function does not simply handle incoming events.

def _handle_incoming_event(self):
        """Handle an incoming event.

        Returns True if further messages should be received, False otherwise
        (it should quit, that is).

        TODO: Move the content of this function into `_handle_one_message`.
        This class function does not simply handle incoming events.

        """
        eventstr = self.query_socket.recv()

        newid = self.id_generator.generate()

        # Make sure newid is not part of our request vocabulary
        assert newid not in (b"QUERY", b"PUBLISH"), \
            "Generated ID must not be part of req/rep vocabulary."
        assert not newid.startswith("ERROR"), \
            "Generated ID must not be part of req/rep vocabulary."

        # Important this is done before forwarding to the streaming socket
        self.eventstore.add_event(newid, eventstr)

        self.streaming_socket.send(newid.encode(), zmq.SNDMORE)
        self.streaming_socket.send(self.oldid.encode(), zmq.SNDMORE)
        self.streaming_socket.send(eventstr)

        self.oldid = newid

        assert not self.query_socket.getsockopt(zmq.RCVMORE)
        self.query_socket.send(b"PUBLISHED")