add onOpen onError onClose