예제 #1
0
        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());
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        async Task activeActorAndItsComps <TActorAgent>(long actorId) where TActorAgent : IComponentActorAgent
        {
            var actor = await ActorManager.GetOrNew <TActorAgent>(actorId);

            await((ComponentActor)actor.Owner).ActiveAllComps();
        }