package cn.cloudwalk.event; import cn.cloudwalk.cwos.client.event.EventClient; import cn.cloudwalk.cwos.client.event.event.BaseEvent; import cn.cloudwalk.cwos.client.event.event.CustomEvent; import cn.cloudwalk.event.handler.CustomEventHandler; import cn.cloudwalk.event.handler.EventHandler; import cn.cloudwalk.event.handler.EventHandlerMapping; import cn.cloudwalk.event.handler.EventHandlerWorker; import cn.cloudwalk.event.listener.GroupEventListener; import cn.cloudwalk.event.listener.GroupListnerClassMapping; import cn.cloudwalk.event.task.EventHandleTask; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; public class CloudwalkEventManager { private static final Logger LOGGER = LoggerFactory.getLogger(CloudwalkEventManager.class); private EventHandlerMapping eventHandlerMapping; private EventHandlerWorker eventHandlerWorker; private GroupListnerClassMapping groupListnerClassMapping; private EventClient eventClient; public void handle(Class eventListnerClass, BaseEvent baseEvent) { String groupId = this.groupListnerClassMapping.getGroupId(eventListnerClass); if (baseEvent instanceof CustomEvent) { List customEventHandlers = (List)this.eventHandlerMapping.getServiceCodeCustomHandlerListMap(groupId, ((CustomEvent)baseEvent).getTopic()).get(baseEvent.getServiceCode()); eventHandle(baseEvent, customEventHandlers); return; } List handlerList = (List)this.eventHandlerMapping.getServiceCodeHandlerListMap(groupId, baseEvent.getClass()).get(baseEvent.getServiceCode()); eventHandle(baseEvent, handlerList); } private void eventHandle(BaseEvent baseEvent, List handlers) { if (CollectionUtils.isEmpty(handlers)) { LOGGER.error("没有相应的事件处理程序"); return; } for (EventHandler eventHandler : handlers) { this.eventHandlerWorker.work(new EventHandleTask(baseEvent, eventHandler)); } } public void publish(BaseEvent baseEvent) { this.eventClient.pubEvent(baseEvent); } public void setEventHandlerMapping(EventHandlerMapping eventHandlerMapping) { this.eventHandlerMapping = eventHandlerMapping; } public EventHandlerMapping getEventHandlerMapping() { return this.eventHandlerMapping; } public void setEventHandlerWorker(EventHandlerWorker eventHandlerWorker) { this.eventHandlerWorker = eventHandlerWorker; } public void setEventClient(EventClient eventClient) { this.eventClient = eventClient; } public void setGroupListnerClassMapping(GroupListnerClassMapping groupListnerClassMapping) { this.groupListnerClassMapping = groupListnerClassMapping; } }