Abstract event manager

sharing event manager API
Can we update to use shared_ptrs