ConnectionListener + MessageDispatcher -> much simpler MessageListener