コード例 #1
0
        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;
                }
            }
        }