예제 #1
0
        public void Update()
        {
            while (_running)
            {
                long start = TCPManager.GetTimeStampMS();

                if (start - _lastRegionUpdate > 500)
                {
                    Log.Error("RegionMgr", "[" + RegionId + "] - Region inter-update period too long - took " + (start - _lastRegionUpdate) + " ms.");
                }

                else if (start - _lastRegionUpdate > 250)
                {
                    Log.Notice("RegionMgr", "[" + RegionId + "] - Region inter-update period too long - took " + (start - _lastRegionUpdate) + " ms.");
                }

                try
                {
                    WorldMgr.UpdateScripts(start);

                    AddNewObjects();

                    RemoveOldObjects();

                    UpdateActors(start);

                    //Bttlfront?.Update(start);
                    ndbf?.Update(start);
                }

                catch (Exception e)
                {
                    Log.Error("Error", e.ToString());
                }

                long elapsed = TCPManager.GetTimeStampMS() - start;

                _lastRegionUpdate = TCPManager.GetTimeStampMS();

                if (elapsed < RegionUpdateInterval)
                {
                    Thread.Sleep((int)(RegionUpdateInterval - elapsed));
                }
                else
                {
                    if (elapsed > 500)
                    {
                        Log.Error("RegionMgr", "[" + RegionId + "] - Region update took too long. " + GetObjects() + " objects. " + elapsed + "ms.");
                    }
                    else if (elapsed > 250)
                    {
                        Log.Notice("RegionMgr", "[" + RegionId + "] - Region update took too long. " + GetObjects() + " objects. " + elapsed + "ms.");
                    }
                }
            }

            DisposeActors();
        }
예제 #2
0
        public void Update()
        {
            while (Running)
            {
                long Start = TCPManager.GetTimeStampMS();

                try
                {
                    WorldMgr.UpdateScripts(Start);

                    int i = 0;
                    lock (ZonesMgr)
                    {
                        for (; i < ZonesMgr.Count; ++i)
                        {
                            ZonesMgr[i].Run(Start);
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Error("Erreur", e.ToString());
                }

                /*if (NextCollect <= Start)
                 * {
                 *  GC.Collect();
                 *  GC.WaitForPendingFinalizers();
                 *  NextCollect = Start + COLLECT_UPDATE_INTERVAL;
                 * }*/

                long Elapsed = TCPManager.GetTimeStampMS() - Start;
                if (Elapsed < REGION_UPDATE_INTERVAL)
                {
                    Thread.Sleep((int)(REGION_UPDATE_INTERVAL - Elapsed));
                }
                else
                {
                    Log.Debug("RegionMgr", "[" + RegionId + "] La region lag, " + GetObjects() + " objets! " + Elapsed + "ms");
                }
            }
        }