add listenEventOnce method