static async Task triggerTimer(long actorId, string actorType, string handlerType, Param param) { try { var handler = HotfixMgr.GetInstance <ITimerHandler>(handlerType); var agentType = handler.GetType().BaseType.GenericTypeArguments[0]; if (agentType.GetInterface(typeof(IComponentActorAgent).FullName) != null) { //actor var agent = await ActorManager.GetOrNew(agentType, actorId); var actor = (ComponentActor)agent.Owner; _ = actor.SendAsync(() => handler.InternalHandleTimer(agent, param), false); } else if (agentType.GetInterface(typeof(IComponentAgent).FullName) != null) { //component var actorAgentType = HotfixMgr.GetType(actorType, agentType); var compType = agentType.BaseType.GenericTypeArguments[0]; var agent = await ActorManager.GetOrNew(actorAgentType, actorId); var actor = (ComponentActor)agent.Owner; var comp = await actor.GetComponent(compType); _ = actor.SendAsync(() => handler.InternalHandleTimer(comp.GetAgent(agentType), param), false); } } catch (Exception e) { LOGGER.Error(e.ToString()); } }
async Task <bool> Start() { try { LOGGER.Info("start server......"); await HttpServer.Start(Settings.Ins.HttpPort); await TcpServer.Start(Settings.Ins.TcpPort, Settings.Ins.UseLibuv); LOGGER.Info("init mongodb......" + Settings.Ins.MongoUrl); MongoDBConnection.Singleton.Connect(Settings.Ins.MongoDB, Settings.Ins.MongoUrl); LOGGER.Info("启动回存timer......"); GlobalDBTimer.Singleton.Start(); LOGGER.Info("注册所有组件......"); ComponentTools.RegistAllComps(); LOGGER.Info("load配置表..."); (bool success, string msg) = GameDataManager.ReloadAll(); if (!success) { return(false); } LOGGER.Info("激活所有全局actor..."); var taskList = new List <Task>(); taskList.Add(activeActorAndItsComps <ServerActorAgent>(ServerActorID.GetID(ActorType.Normal))); //激活其他全局actor await Task.WhenAll(taskList); var serverActor = await ActorManager.GetOrNew <ServerActorAgent>(ServerActorID.GetID(ActorType.Normal)); _ = serverActor.SendAsync(serverActor.CheckCrossDay); return(true); }catch (Exception e) { LOGGER.Fatal("起服失败\n" + e.ToString()); return(false); } }
async Task activeActorAndItsComps <TActorAgent>(long actorId) where TActorAgent : IComponentActorAgent { var actor = await ActorManager.GetOrNew <TActorAgent>(actorId); await((ComponentActor)actor.Owner).ActiveAllComps(); }