BCNet.NodeConnection.RequestBlocks C# (CSharp) Method

RequestBlocks() public method

public RequestBlocks ( BlockHeader headers ) : void
headers BlockHeader
return void
        public void RequestBlocks(BlockHeader[] headers)
        {
            MemoryStream stream = new MemoryStream();
            BinaryWriter bw = new BinaryWriter(stream);

            int count = headers.Length;
            Utils.WriteVarInt(bw, (ulong)count);
            foreach (BlockHeader b in headers)
            {
                const int blockType = 2;
                bw.Write(blockType);
                bw.Write(b.mHash);
            }
            SendPacket("getdata", stream.ToArray());

            bw.Close();
        }

Usage Example

        void RequestBlocks()
        {
            List <BlockHeader> requests = new List <BlockHeader>();

            mBlockLock.WaitOne();
            foreach (Block b in mBlocks)
            {
                if (b.mTransactions.Count == 0)
                {
                    TimeSpan s = DateTime.Now - b.mLastRequestTime;
                    if (s.TotalSeconds > 30)
                    {
                        requests.Add(b.mHeader);
                        b.mLastRequestTime = DateTime.Now;
                    }
                }
            }
            mBlockLock.ReleaseMutex();

            if (requests.Count > 0)
            {
                mLastNode.RequestBlocks(requests.ToArray());
            }
        }