public void UpdateBroadcastStack(Server server) { var players = server.GetPlayers(); _stack.PruneExclusive(players); DateTime utcNow = DateTime.UtcNow; foreach (int dirtySlot in _dirtySlots.ToArray()) { var broadStack = _stack[dirtySlot]; var copyStack = broadStack.ToArray(); var player = players.Find(x => x.PlayerId == dirtySlot); broadStack.Clear(); bool isFirst = true; foreach (var broadcast in copyStack) { int priority = broadcast.Key; var broadMsg = broadcast.Value; if (broadMsg.ExpireAt <= utcNow) { continue; } if (isFirst) { isFirst = false; _dirtySlots.Remove(dirtySlot); player.PersonalClearBroadcasts(); broadMsg.SendMessage(player, Rounding); } broadStack[priority] = broadMsg; } } }