core-client: use event-trigger system to replace iOS-like delegation design