public Download(Peer __peer, RingInfo __ringInfo, ResourceHeader __header, 
     UICallBack __UIHandler)
 {
     peer = __peer;
     ringInfo = __ringInfo;
     header = __header;
     //REVISIT: make sure there is enough room for meta data. Also if very large you want to split up into a list of
     //buffers or circular buffer where the buffer is written to temp file at milestones.
     buffer = new byte[header.size];
     bytesRead = 0;
     UIHandler = __UIHandler;
 }
 public bool Download(Peer peer, RingInfo ringInfo, ResourceHeader resourceHeader, 
     UICallBack UIHndlr)
 {
     Download download = new Download(peer, ringInfo, resourceHeader, UIHndlr);
     int downloadIndex = Add(download);
     if (downloadIndex < 0)
     {
         Queue(download);
         return false;
     }
     Download_Internal(download);
     return true;
 }
        private void searchResultDoubleClickHandler(object Sender, System.EventArgs e)
        {
            int selectIndex = this.queryHitsGrid.CurrentRowIndex;
            DataRow dr = queryResultsTable.Rows[selectIndex];

            Peer peer = (Peer)dr[5];
            RingInfo ringInfo = (RingInfo)dr[6];
            ResourceHeader header = (ResourceHeader)dr[7];

            ProgressBar downloadBar = new ProgressBar();
            dr[4] = downloadBar;
            downloadBar.Maximum = (int)header.size;
            Rectangle cellBound = queryHitsGrid.GetCellBounds(selectIndex, 4);
            downloadBar.Bounds = cellBound;
            downloadBar.Location = new Point(cellBound.X, cellBound.Y);
            downloadBar.Name = "downloadProgressBar";
            downloadBar.Size = new Size(cellBound.Width, cellBound.Height);
            downloadBar.Visible = true;

            UpdateUIHandler downloadProgressBarUpdate = new UpdateUIHandler(updateDownloadProgressBar);
            UICallBack progressBarUpdate = new UICallBack(downloadProgressBarUpdate, downloadBar);

            client.RetreiveResource(peer, ringInfo, header, progressBarUpdate);

            //MessageBox.Show("downloading " + header.name + "...");
        }
 public void RetreiveResource(Peer peer, RingInfo ringInfo, ResourceHeader resourceHeader, 
     UICallBack UIHndlr)
 {
     downloadManager.Download(peer, ringInfo, resourceHeader, UIHndlr);
 }