/// <summary>actor线程执行</summary> public async Task InitListener() { var list = HotfixMgr.GetEventListeners(owner.GetAgent().GetType()); if (list == null) { return; } foreach (var listener in list) { await listener.InnerInitListener(owner.GetAgent()); } }
/// <summary> /// 分发事件 /// </summary> public void DispatchEvent(int evtType, Param param = null) { if (HotfixMgr.IsFromHotfix(param)) { LOGGER.Fatal($"不能添加hotfix工程的类型作为参数 DispatchEvent {param.GetType()}"); return; } Event evt = new Event(); evt.EventId = evtType; evt.Data = param; if (eventHandlers.ContainsKey(evtType)) { var list = eventHandlers[evtType]; foreach (var handlerType in list) { try { var handler = HotfixMgr.GetInstance <IEventListener>(handlerType); var agentType = handler.GetType().BaseType.GenericTypeArguments[1]; if (agentType.GetInterface(typeof(IComponentActorAgent).FullName) != null) { //actor ownerActor.SendAsync(() => handler.InternalHandleEvent(ownerActor.GetAgent(agentType), evt)); } else if (agentType.GetInterface(typeof(IComponentAgent).FullName) != null) { //component var compType = agentType.BaseType.GenericTypeArguments[0]; ownerActor.SendAsync(async() => { var comp = await ownerActor.GetComponent(compType); await handler.InternalHandleEvent(comp.GetAgent(agentType), evt); }, false); } } catch (Exception e) { LOGGER.Error(e.ToString()); } } } }