/// 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); } }
/// 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)); } }
/// 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); }
/// Remove file from Download Manager public static void Remove(PeerSocket peer, XmlRequest xml) { FileReceiver fileRecv = LookupFileReceiver(peer, xml); if (fileRecv != null) { Remove(fileRecv); } }
/// 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); } }
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; }
// ============================================ // 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); } }
/// 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); }