Exemplo n.º 1
0
        protected override void OnTick()
        {
            try {
                long curTime = TimeUtility.GetLocalMilliseconds();
                if (m_LastTickTime != 0)
                {
                    long elapsedTickTime = curTime - m_LastTickTime;
                    if (elapsedTickTime > c_WarningTickTime)
                    {
                        LogSys.Log(LOG_TYPE.MONITOR, "RoomThread Tick:{0}", elapsedTickTime);
                    }
                }
                m_LastTickTime = curTime;

                if (m_LastLogTime + 60000 < curTime)
                {
                    m_LastLogTime = curTime;

                    DebugPoolCount((string msg) => {
                        LogSys.Log(LOG_TYPE.INFO, "RoomThread.ActionQueue {0}, thread {1}", msg, cur_thread_id_);
                    });
                    LogSys.Log(LOG_TYPE.MONITOR, "RoomThread.ActionQueue Current Action {0}", this.CurActionNum);
                }

                long tick_interval_us = tick_interval_ * 1000;
                TimeSnapshot.Start();
                DoTick();
                long elapsedTime = TimeSnapshot.End();
                if (elapsedTime >= tick_interval_us)
                {
                    if (elapsedTime >= tick_interval_us * 2)
                    {
                        LogSys.Log(LOG_TYPE.DEBUG, "*** Warning, RoomThread tick interval is {0} us !", elapsedTime);
                        foreach (Room room in active_room_)
                        {
                            Scene scene = room.ActiveScene;
                            if (null != scene)
                            {
                                if (scene.SceneState == SceneState.Running)
                                {
                                    SceneProfiler profiler = scene.SceneProfiler;
                                    LogSys.Log(LOG_TYPE.DEBUG, "{0}", profiler.GenerateLogString(scene.SceneResId, scene.GameTime.ElapseMilliseconds));
                                }
                            }
                        }
                    }
                    Thread.Sleep(0);
                }
                else
                {
                    Thread.Sleep((int)(tick_interval_ - elapsedTime / 1000));
                }
            } catch (Exception ex) {
                LogSys.Log(LOG_TYPE.ERROR, "Exception {0}\n{1}", ex.Message, ex.StackTrace);
            }
        }
Exemplo n.º 2
0
 static public int constructor(IntPtr l)
 {
     try {
         GameFramework.TimeSnapshot o;
         o = new GameFramework.TimeSnapshot();
         pushValue(l, true);
         pushValue(l, o);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
 }
Exemplo n.º 3
0
        private void TickRunning()
        {
            TimeSnapshot.DoCheckPoint();

            m_KdTree.BeginBuild(m_EntityMgr.Entities.Count);
            for (LinkedListNode <EntityInfo> linkNode = m_EntityMgr.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next)
            {
                EntityInfo info = linkNode.Value;
                m_KdTree.AddObjForBuild(info);
            }
            m_KdTree.EndBuild();

            m_ServerDelayActionProcessor.HandleActions(100);
            m_SceneProfiler.DelayActionProcessorTime = TimeSnapshot.DoCheckPoint();

            m_MovementSystem.Tick();
            m_SceneProfiler.MovementSystemTime = TimeSnapshot.DoCheckPoint();

            TickAi();
            m_SceneProfiler.AiSystemTime = TimeSnapshot.DoCheckPoint();

            m_SceneLogicSystem.Tick();
            m_SceneProfiler.SceneLogicSystemTime = TimeSnapshot.DoCheckPoint();

            m_StorySystem.Tick();
            m_GmStorySystem.Tick();
            m_SceneProfiler.StorySystemTime = TimeSnapshot.DoCheckPoint();

            TickEntities();
            m_SceneProfiler.TickEntitiesTime = TimeSnapshot.DoCheckPoint();

            //属性同步
            if (0 == m_LastTickTimeForTickPerSecond)
            {
                m_LastTickTimeForTickPerSecond = TimeUtility.GetLocalMilliseconds();
                TickProperty();
            }
            else
            {
                long curTime = TimeUtility.GetLocalMilliseconds();
                if (curTime > m_LastTickTimeForTickPerSecond + c_IntervalPerSecond)
                {
                    m_LastTickTimeForTickPerSecond = curTime;
                    TickProperty();
                }
            }

            if (0 == m_LastTickTimeForTickPer5s)
            {
                m_LastTickTimeForTickPer5s = TimeUtility.GetLocalMilliseconds();
                ReloadObjects();
            }
            else
            {
                long curTime = TimeUtility.GetLocalMilliseconds();
                if (curTime > m_LastTickTimeForTickPer5s + c_IntervalPer5s)
                {
                    m_LastTickTimeForTickPer5s = curTime;
                    ReloadObjects();
                }
            }

            m_SceneProfiler.TickAttrRecoverTime = TimeSnapshot.DoCheckPoint();
            //空间信息调试
            TickDebugSpaceInfo();
            m_SceneProfiler.TickDebugSpaceInfoTime = TimeSnapshot.DoCheckPoint();
        }