internal TorrentDownloadManager(PeerId localPeerId,
                                        IMainLoop mainLoop,
                                        IApplicationProtocol <PeerConnection> applicationProtocol,
                                        ITracker tracker,
                                        Metainfo description)
        {
            this.localPeerId    = localPeerId;
            this.mainLoop       = mainLoop;
            ApplicationProtocol = applicationProtocol;
            Description         = description;
            Tracker             = tracker;
            State                     = DownloadState.Pending;
            Downloaded                = 0;
            DownloadRateMeasurer      = new RateMeasurer();
            UploadRateMeasurer        = new RateMeasurer();
            progress                  = new Progress <StatusUpdate>();
            progress.ProgressChanged += ProgressChanged;

            pipeline = new PipelineBuilder()
                       .AddStage <VerifyDownloadedPiecesStage>()
                       .AddStage <DownloadPiecesStage>()
                       .Build();

            stageInterrupt = new StageInterrupt();
        }
Esempio n. 2
0
 public DownloadPiecesStage(IApplicationProtocol <PeerConnection> application,
                            IMainLoop mainLoop,
                            IPiecePicker piecePicker)
 {
     this.application = application;
     this.mainLoop    = mainLoop;
     this.piecePicker = piecePicker;
 }
        public IPeer InitiateOutgoingConnection(ITransportStream transportStream, IApplicationProtocol applicationProtocol)
        {
            var writer = new BigEndianBinaryWriter(transportStream.Stream);
            var reader = new BigEndianBinaryReader(transportStream.Stream);

            WriteConnectionHeader(writer, applicationProtocol.Metainfo.InfoHash, _localPeerId);
            var header = ReadConnectionHeader(reader);

            if (header.InfoHash != applicationProtocol.Metainfo.InfoHash)
            {
                // Infohash mismatch
                throw new NotImplementedException();
            }

            return(new BitTorrentPeer(
                       applicationProtocol.Metainfo,
                       header.PeerId,
                       header.ReservedBytes,
                       header.SupportedExtensions,
                       new QueueingMessageHandler(_mainLoop, (BitTorrentApplicationProtocol)applicationProtocol),
                       transportStream));
        }
        public PipelineRunner(ILogger <PipelineRunner> logger,
                              PeerId localPeerId,
                              IMainLoop mainLoop,
                              IApplicationProtocol applicationProtocol,
                              ITracker tracker,
                              IServiceProvider parentContainer,
                              IPipelineFactory pipelineFactory)
        {
            _logger             = logger;
            _localPeerId        = localPeerId;
            _mainLoop           = mainLoop;
            ApplicationProtocol = applicationProtocol;
            Description         = applicationProtocol.Metainfo;
            _parentContainer    = parentContainer;
            _pipelineFactory    = pipelineFactory;
            Tracker             = tracker;
            State = DownloadState.Pending;
            DownloadRateMeasurer       = new RateMeasurer();
            UploadRateMeasurer         = new RateMeasurer();
            _progress                  = new Progress <StatusUpdate>();
            _progress.ProgressChanged += ProgressChanged;

            _stageInterrupt = new StageInterrupt();
        }
            public IPipeline CreatePipeline(IServiceProvider pipelineScope, IApplicationProtocol applicationProtocol)
            {
                var stages = _stages.Select(x => (IPipelineStage)ActivatorUtilities.CreateInstance(pipelineScope, x, applicationProtocol)).ToList();

                return(ActivatorUtilities.CreateInstance <Pipeline>(pipelineScope, stages));
            }
 public VerifyDownloadedPiecesStage(ILogger <VerifyDownloadedPiecesStage> logger, IApplicationProtocol application)
 {
     _logger      = logger;
     _application = application;
 }
 public void OnApplicationProtocolRemoved(IApplicationProtocol instance)
 {
     _applicationProtocolLookup.Remove(instance.Metainfo.InfoHash);
 }
 public void OnApplicationProtocolAdded(IApplicationProtocol instance)
 {
     _applicationProtocolLookup.Add(instance.Metainfo.InfoHash, instance);
 }
 public VerifyDownloadedPiecesStage(IApplicationProtocol <PeerConnection> application)
 {
     this.application = application;
 }