PRoConEvents.MULTIbalancer.GarbageCollectKnownPlayers C# (CSharp) Method

GarbageCollectKnownPlayers() private method

private GarbageCollectKnownPlayers ( ) : void
return void
        private void GarbageCollectKnownPlayers()
        {
            int n = 0;
            bool revalidate = false;
            lock (fKnownPlayers) {
            List<String> garbage = new List<String>();

            // collect up garbage
            foreach (String name in fKnownPlayers.Keys) {
            PlayerModel m = fKnownPlayers[name];
            m.LastMoveTo = 0; // reset this value while we are here
            if (DateTime.Now.Subtract(m.LastSeenTimestamp).TotalMinutes > MODEL_TIMEOUT) {
                if (IsKnownPlayer(name)) {
                    ConsoleDebug("^b" + name + "^n has timed out and is still on active players list, idling?");
                    // Revalidate the data model
                    revalidate = true;
                } else {
                    garbage.Add(name);
                }
            }
            }

            // remove garbage
            if (garbage.Count > 0) foreach (String name in garbage) {
            fKnownPlayers.Remove(name);
            n = n + 1;
            }
            }

            if (revalidate) {
            lock (fAllPlayers) {
            fAllPlayers.Clear();
            ScheduleListPlayers(1);
            }
            }

            if (n > 0) {
            DebugWrite("^9Garbage collected " + n + " old players from known players table", 6);
            }
        }
MULTIbalancer