generalize dispatch client
Hook -> Event