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();
        }
 public void Setup()
 {
     _mainLoop = new MainLoop();
     _mainLoop.Start();
 }