Example #1
0
        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;
        }
Example #3
0
        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);
        }
Example #5
0
        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);
            }
        }
Example #6
0
 private void SaveFile(PeerFileSlice file)
 {
     Console.WriteLine($"Saving file => {file}");
     files.Add(file);
 }
Example #7
0
        public async Task SaveAndShare(PeerFileSlice file, int requesterPeerId)
        {
            var peersToShare = GetConnectedPeersWithoutId(requesterPeerId);

            await SaveAndShareForPeers(file, peersToShare);
        }
Example #8
0
 public void SendFile(PeerFileSlice file)
 {
     Send(new UploadFileSliceMessage(file));
 }