private PeerFileSlice GetFileByStartAndEndIndexes(string fileName, List <byte> bytes, int startIndex, int endIndex, PeerInfo owner) { var list = bytes.GetRange(startIndex, endIndex - startIndex); var file = new PeerFileSlice(fileName, owner, startIndex, endIndex, list.ToArray()); return(file); }
public DownloadFileSliceMessage(PeerFileSlice file) : base(PeerCommandType.DOWNLOAD_FILE_SLICE) { var fileHead = Encoding.UTF8.GetBytes(file.ToString()); head = fileHead.ToArray(); body = file.Slice; File = file; }
private PeerFileSlice GetFileByStartAndEndIndexes(PeerFileSlice file, int startIndex, int endIndex) { var realStartIndex = file.StartIndex + startIndex; var realEndIndex = realStartIndex + (endIndex - startIndex); var list = file.Slice.ToList().GetRange(startIndex, endIndex - startIndex); var slice = new PeerFileSlice(file.Name, file.Owner, realStartIndex, realEndIndex, list.ToArray()); return(slice); }
public DownloadFileSliceMessage(Message message) : base(message) { var fileInfoCommandSplit = Encoding.UTF8.GetString(head).Split(';'); var fileName = fileInfoCommandSplit[0]; var startIndex = int.Parse(fileInfoCommandSplit[1]); var endIndex = int.Parse(fileInfoCommandSplit[2]); var info = PeerInfo.FromString(fileInfoCommandSplit[3]); File = new PeerFileSlice(fileName, info, startIndex, endIndex, body); }
public async Task SaveAndShareForPeers(PeerFileSlice file, IList <PeerProcessor> peersToShare) { var bytesAsList = file.Slice.ToList(); int peersAmount = await GetNumberOfFragments(peersToShare) + 1; var fragmentSize = (bytesAsList.Count / peersAmount); var currentSlice = 0; var startIndex = fragmentSize * currentSlice; var endIndex = fragmentSize * (currentSlice + 1); SaveFile(GetFileByStartAndEndIndexes(file, startIndex, endIndex)); foreach (var peerProcessor in peersToShare) { currentSlice++; var numberOfConnections = await peerProcessor.GetNumberOfConnections(); Console.WriteLine($"numberOfConnections: {peerProcessor.ConnectedPeerInfo} => {numberOfConnections}"); startIndex = fragmentSize * currentSlice; currentSlice += numberOfConnections; if (peerProcessor == peersToShare.Last()) { endIndex = bytesAsList.Count; } else { endIndex = fragmentSize * (currentSlice + 1) - 1; } var fileToSend = GetFileByStartAndEndIndexes(file, startIndex, endIndex); peerProcessor.SendFile(fileToSend); } }
private void SaveFile(PeerFileSlice file) { Console.WriteLine($"Saving file => {file}"); files.Add(file); }
public async Task SaveAndShare(PeerFileSlice file, int requesterPeerId) { var peersToShare = GetConnectedPeersWithoutId(requesterPeerId); await SaveAndShareForPeers(file, peersToShare); }
public void SendFile(PeerFileSlice file) { Send(new UploadFileSliceMessage(file)); }