use pub-sub model to handle multiple speakers