Beispiel #1
0
        /// Remove file from Accept list and prepare to Receve it
        public static void InitFile(PeerSocket peer, XmlRequest xml)
        {
            FileReceiver fileRecv = LookupFileReceiver(peer, xml);

            string    path     = (string)xml.Attributes["name"];
            Hashtable peerList = acceptList[peer] as Hashtable;
            string    name     = (string)peerList[path];

            peerList.Remove(path);
            acceptList[peer] = peerList;

            if (fileRecv == null)
            {
                fileRecv = new FileReceiver(peer, xml, name);
                AddFileReceiver(peer, path, fileRecv);
            }

            numDownloads++;

            // Start New File Added
            if (Added != null)
            {
                Added(fileRecv);
            }
        }
Beispiel #2
0
        /// Get File Part
        public static void GetFilePart(PeerSocket peer, XmlRequest xml)
        {
            FileReceiver fileRecv = LookupFileReceiver(peer, xml);

            if (fileRecv != null)
            {
                fileRecv.Append(xml);

                // Send Received Part Event
                if (Received != null)
                {
                    Received(fileRecv);
                }
            }
            else
            {
                string   fileName = (string)xml.Attributes["name"];
                UserInfo userInfo = peer.Info as UserInfo;

                string message = "What file is this ?" +
                                 "\nUser: "******"\nFileName: " + fileName;
                throw(new DownloadManagerException(message));
            }
        }
Beispiel #3
0
        /// Abort file Download
        public static void Abort(FileReceiver fileReceiver)
        {
            SendFileAbort(fileReceiver.Peer,
                          fileReceiver.FileName, fileReceiver.FileSize);

            // Remove File
            Remove(fileReceiver);
        }
        public FileProgressObject(FileReceiver recv)
        {
            this.fileReceiver = recv;
            InitializeObject(true);

            // Initialize Info
            UpdateFileReceiver(this.fileReceiver);
        }
Beispiel #5
0
        /// Remove file from Download Manager
        public static void Remove(PeerSocket peer, XmlRequest xml)
        {
            FileReceiver fileRecv = LookupFileReceiver(peer, xml);

            if (fileRecv != null)
            {
                Remove(fileRecv);
            }
        }
Beispiel #6
0
        /// Remove file from Download Manager
        public static void Remove(FileReceiver fileReceiver)
        {
            fileReceiver.Save();
            RemoveFileReceiver(fileReceiver.Peer, fileReceiver.FileName);
            numDownloads--;

            // Start Finished File Event
            if (Finished != null)
            {
                Finished(fileReceiver);
            }
        }
Beispiel #7
0
        private static void AddFileReceiver(PeerSocket peer, string name, FileReceiver fr)
        {
            Hashtable peerList = recvFileList[peer] as Hashtable;

            // Initialize PeerList
            if (peerList == null)
            {
                peerList = Hashtable.Synchronized(new Hashtable());
            }
            peerList[name]     = fr;
            recvFileList[peer] = peerList;
        }
Beispiel #8
0
        // ============================================
        // PRIVATE (Methods) Event Handlers
        // ============================================
        private static FileReceiver LookupFileReceiver(PeerSocket peer, XmlRequest xml)
        {
            string    fileName = (string)xml.Attributes["name"];
            Hashtable peerList = recvFileList[peer] as Hashtable;

            if (peerList == null)
            {
                return(null);
            }
            FileReceiver fileReceiver = peerList[fileName] as FileReceiver;

            return(fileReceiver);
        }
        // ============================================
        // PRIVATE Methods
        // ============================================
        private static void AbortDownload(FileReceiver fileRecv)
        {
            // Abort Download
            fileRecv.EndAbort -= new BlankEventHandler(OnEndAbort);
            fileRecv.Abort();

            // Update Num Downloads
            numDownloads--;

            // Raise Aborted Event
            if (Aborted != null)
            {
                Aborted(fileRecv);
            }
        }
        // ============================================
        // PUBLIC Methods
        // ============================================
        /// Add New Download To The Accept List
        public static void Accept(PeerSocket peer, ulong id,
                                  string path, string saveAs)
        {
            FileReceiver fileRecv = new FileReceiver(id, peer, path, saveAs);

            fileRecv.EndAbort += new BlankEventHandler(OnEndAbort);

            acceptList.Add(peer, fileRecv);

            // Update Num Downloads
            numDownloads++;

            // Raise Added Event
            if (Added != null)
            {
                Added(fileRecv);
            }
        }
        /// Save and Remove Download From Receiving List
        public static void FinishedDownload(PeerSocket peer, ulong id)
        {
            FileReceiver fileRecv = new FileReceiver(id);

            fileRecv = (FileReceiver)recvList.Search(peer, fileRecv);
            fileRecv.Save();
            fileRecv.EndAbort -= new BlankEventHandler(OnEndAbort);
            recvList.Remove(peer, fileRecv);

            // Update Num Downloads
            numDownloads--;

            // Raise Finished Event
            if (Finished != null)
            {
                Finished(fileRecv);
            }
        }
Beispiel #12
0
        /// File is Ended, Save it
        public static void SaveFile(PeerSocket peer, XmlRequest xml)
        {
            FileReceiver fileRecv = LookupFileReceiver(peer, xml);

            if (fileRecv != null)
            {
                Remove(fileRecv);
            }
            else
            {
                string   fileName = (string)xml.Attributes["name"];
                UserInfo userInfo = peer.Info as UserInfo;

                string message = "<b>What file is this ?</b>" +
                                 "\n<b>User:</b> " + userInfo.Name +
                                 "\n<b>FileName:</b> " + fileName;
                throw(new DownloadManagerException(message));
            }
        }
        /// Append New Data To Download
        public static void GetFilePart(PeerSocket peer, ulong id, XmlRequest xml)
        {
            FileReceiver fileRecv = new FileReceiver(id);

            fileRecv = (FileReceiver)recvList.Search(peer, fileRecv);
            if (fileRecv == null)
            {
                return;
            }

            // Add Part
            fileRecv.AddPart(xml);

            // Raise Received Event
            if (ReceivedPart != null)
            {
                ReceivedPart(fileRecv);
            }
        }
        /// Abort Download and Remove it From Receiving or Accepted List using Disk Name
        public static void AbortDownload(string fileName)
        {
            FileReceiver fileRecv = null;

            if ((fileRecv = (FileReceiver)acceptList.Search(fileName)) != null)
            {
                acceptList.Remove(fileRecv.Peer, fileRecv);
            }
            else
            {
                fileRecv = (FileReceiver)recvList.Search(fileName);
                if (fileRecv == null)
                {
                    return;
                }
                recvList.Remove(fileRecv.Peer, fileRecv);
            }

            AbortDownload(fileRecv);
        }
        /// Abort Download and Remove it From Receiving or Accepted List
        public static void AbortDownload(PeerSocket peer, ulong id)
        {
            FileReceiver fileRecv = new FileReceiver(id);

            if ((fileRecv = (FileReceiver)acceptList.Search(peer, fileRecv)) != null)
            {
                acceptList.Remove(peer, fileRecv);
            }
            else
            {
                fileRecv = (FileReceiver)recvList.Search(peer, new FileReceiver(id));
                if (fileRecv == null)
                {
                    return;
                }
                recvList.Remove(peer, fileRecv);
            }

            AbortDownload(fileRecv);
        }
        /// Move Download From Accept To Receiving List and Initialize it
        public static void InitDownload(PeerSocket peer, ulong id, XmlRequest xml)
        {
            FileReceiver fileRecv = new FileReceiver(id);

            if ((fileRecv = (FileReceiver)acceptList.Search(peer, fileRecv)) == null)
            {
                ArrayList files = acceptList.GetFiles(peer);

                string name = (string)xml.Attributes["name"];
                foreach (FileReceiver fRecv in files)
                {
                    if (fRecv.Name == name)
                    {
                        fileRecv = fRecv;
                        break;
                    }
                }
            }
            acceptList.Remove(peer, fileRecv);
            fileRecv.Id = id;
            recvList.Add(peer, fileRecv);
            fileRecv.Init(xml);
        }
 // ============================================
 // PRIVATE Methods
 // ============================================
 private void SetTransferInfo(FileProgressObject obj, FileReceiver fr)
 {
     if (obj != null) {
         int percent = fr.ReceivedPercent;
         if (percent < 0) percent = 0;
         obj.SetTransferInfo(fr.SavedSize, fr.Size, percent);
     }
 }
        // ============================================
        // PRIVATE (Methods) Event Handlers
        // ============================================
        private static void OnEndAbort(object sender)
        {
            FileReceiver fileRecv = sender as FileReceiver;

            AbortDownload(fileRecv);
        }