mark
用状态机实现事件响应