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(); }
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; }