예제 #1
0
        public TorrentClient(TorrentClientSettings settings)
        {
            downloads     = new Dictionary <Sha1Hash, TorrentDownload>();
            mainLoop      = new MainLoop();
            moduleManager = new ModuleManager();
            moduleManager.Register(new CoreMessagingModule());
            mainLoop.Start();
            peerInitiator = new BitTorrentPeerInitiator(infoHash => (BitTorrentApplicationProtocol <BitTorrentPeerInitiator.IContext>)downloads[infoHash].Manager.ApplicationProtocol, moduleManager);
            LocalPeerId   = settings.PeerId;

            transport = new TcpTransportProtocol(
                settings.ListenPort,
                settings.FindAvailablePort,
                settings.AdapterAddress,
                AcceptConnection);

            transport.Start();
            trackerClientFactory  = new TrackerClientFactory(transport.LocalConection);
            updateStatisticsTimer = new Timer(UpdateStatistics, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
            AdapterAddress        = settings.AdapterAddress;
        }
예제 #2
0
        public TorrentClient(
            ILogger <TorrentClient> logger,
            PeerId localPeerId,
            IMainLoop mainLoop,
            ITransportProtocol transport,
            ITrackerClientFactory trackerClientFactory,
            IApplicationProtocolPeerInitiator peerInitiator,
            IServiceProvider services)
        {
            _logger    = logger;
            _downloads = new Dictionary <Sha1Hash, TorrentDownload>();
            _mainLoop  = mainLoop;
            _mainLoop.Start();
            _trackerClientFactory  = trackerClientFactory;
            _services              = services;
            _updateStatisticsTimer = new Timer(UpdateStatistics, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
            _peerInitiator         = peerInitiator;
            LocalPeerId            = localPeerId;

            Transport = transport;
            transport.AcceptConnectionHandler += _peerInitiator.AcceptIncomingConnection;
            Transport.Start();
        }
예제 #3
0
 public AggregatedTracker(ITrackerClientFactory trackerClientFactory, IReadOnlyList <IReadOnlyList <Uri> > trackers)
 {
     this.trackerClientFactory = trackerClientFactory;
     this.trackers             = trackers;
     activeTrackers            = new Dictionary <ITracker, TrackerStatistics>();
 }