Beispiel #1
0
        private void ProcessTransferlist(RSProtoBuffSSHMsg msg)
        {
            ResponseTransferList response = new ResponseTransferList();
            Exception            e;

            if (RSProtoBuf.Deserialize <ResponseTransferList>(msg.ProtoBuffMsg, out response, out e))
            {
                if (response.status.code == Status.StatusCode.SUCCESS)
                {
                    _b.FileProcessor.UpdateFileTransfers(response, msg.ReqID);
                    //_b.FileProcessor.UpdateFileTransfersNEW(response, msg.ReqID);
                }
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("ProcessTransferlist: error deserializing " + e.Message);
            }
        }
Beispiel #2
0
        internal void UpdateFileTransfers(ResponseTransferList list, uint reqID)
        {
            List <string> hashes = new List <string>();

            // get direction(DL/UL) of request/result
            Direction dir;

            if (_pendingRequests.TryGetValue(reqID, out dir))
            {
            }
            //_pendingRequests.Remove(reqID);
            else
            if (list.transfers.Count > 0)
            {
                dir = list.transfers[0].direction;
            }
            else
            {
                // shouldn't end here
                return;
            }

            // add new / update old
            foreach (FileTransfer ft in list.transfers)
            {
                if (ft == null)
                {
                    continue;
                }
                if (_fileTransfers.ContainsKey(ft.file.hash)) // update
                {
                    GuiFileTransfer gft = _fileTransfers[ft.file.hash];
                    gft.FileTransfer             = ft;
                    _fileTransfers[ft.file.hash] = gft;
                    System.Diagnostics.Debug.WriteLineIf(DEBUG_FILES, "FileTransfer: updating " + ft.file.hash);
                }
                else //new
                {
                    GuiFileTransfer gft = new GuiFileTransfer();
                    gft.FileTransfer = ft;
                    _fileTransfers.Add(gft.Hash, gft);
                    System.Diagnostics.Debug.WriteLineIf(DEBUG_FILES, "FileTransfer: adding " + ft.file.hash);
                }
                hashes.Add(ft.file.hash);
            }


            // remove
            GuiFileTransfer[] fileTransfers = new GuiFileTransfer[_fileTransfers.Values.Count];
            _fileTransfers.Values.CopyTo(fileTransfers, 0);
            foreach (GuiFileTransfer gft in fileTransfers)
            {
                if (!hashes.Contains(gft.Hash) && gft.FileTransfer.direction == dir)
                {
                    _fileTransfers.Remove(gft.Hash);
                }
            }

            UpdateFileLists(dir);
            //UpdateFileListsNEW(dir);
        }
Beispiel #3
0
        internal void UpdateFileTransfersNEW(ResponseTransferList list, uint reqID)
        {
            List <string> hashes = new List <string>();

            // get direction(DL/UL) of request/result
            Direction dir;

            if (_pendingRequests.TryGetValue(reqID, out dir))
            {
                _pendingRequests.Remove(reqID);
            }
            else
            if (list.transfers.Count > 0)
            {
                dir = list.transfers[0].direction;
            }
            else
            {
                // shouldn't end here
                return;
            }

            _fileTransfersNEW.Clear();

            // map new file transfers to their file hashes
            //Dictionary<string, FileTransfer> mapHashToFileTransfer = new Dictionary<string,FileTransfer>();
            foreach (FileTransfer fileTransfer in list.transfers)
            {
                _fileTransfersNEW.Add(fileTransfer.file.hash, fileTransfer);
            }

            //// add new - update old
            //foreach (KeyValuePair<string, FileTransfer> pair in mapHashToFileTransfer)
            //    if (_fileTransfersNEW.ContainsKey(pair.Key))
            //        _fileTransfersNEW[pair.Key] = pair.Value;
            //    else
            //        _fileTransfersNEW.Add(pair.Key, pair.Value);
            //// remove
            //FileTransfer[] fileTransfers = new FileTransfer[_fileTransfersNEW.Values.Count];
            //_fileTransfersNEW.Values.CopyTo(fileTransfers, 0);
            //foreach (FileTransfer ft in fileTransfers)
            //    if(!mapHashToFileTransfer.ContainsKey(ft.file.hash))
            //        _fileTransfersNEW.Remove(ft.file.hash);

            FileTransfer ft;

            for (int i = 0; i < 50; i++)
            {
                ft      = new FileTransfer();
                ft.file = new File();

                ft.direction = Direction.DIRECTION_DOWNLOAD;
                ft.file.name = i.ToString();
                ft.rate_kBs  = i;
                ft.fraction  = i / 100;
                ft.file.size = (ulong)i;
                ft.file.hash = i.ToString();
                _fileTransfersNEW.Add(ft.file.hash, ft);
            }

            UpdateFileListsNEW(dir);
        }