예제 #1
0
        void CancelWhere(Predicate <Block> predicate)
        {
            bool cancelled = false;

            for (int p = 0; p < requests.Count; p++)
            {
                var blocks = requests [p].Blocks;
                for (int i = 0; i < blocks.Length; i++)
                {
                    if (predicate(blocks[i]) && !blocks[i].Received)
                    {
                        cancelled = true;
                        blocks[i].CancelRequest();
                    }
                }
            }

            if (cancelled)
            {
                requests.RemoveAll(delegate(Piece p) { return(p.NoBlocksRequested); });
            }
        }
예제 #2
0
        void CancelWhere(Predicate <Block> predicate)
        {
            bool cancelled = false;

            for (int p = 0; p < requests.Count; p++)
            {
                Block[] blocks = requests[p].Blocks;
                for (int i = 0; i < blocks.Length; i++)
                {
                    if (predicate(blocks[i]) && !blocks[i].Received)
                    {
                        requests[p].Abandoned = true;
                        cancelled             = true;
                        blocks[i].CancelRequest();
                    }
                }
            }

            if (cancelled)
            {
                requests.RemoveAll(p => p.NoBlocksRequested);
            }
        }
예제 #3
0
        int CancelWhere(Predicate <Block> predicate)
        {
            int count = 0;

            for (int p = 0; p < requests.Count; p++)
            {
                Block[] blocks = requests[p].Blocks;
                for (int i = 0; i < blocks.Length; i++)
                {
                    if (predicate(blocks[i]) && !blocks[i].Received)
                    {
                        requests[p].Abandoned = true;
                        blocks[i].CancelRequest();
                        count++;
                    }
                }
            }

            if (count > 0)
            {
                requests.RemoveAll(p => p.NoBlocksRequested);
            }
            return(count);
        }