Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="cacheManager"></param>
        /// <param name="share"></param>
        /// <param name="basePaths">a list of base paths to exclude from full uri</param>
        public HyperRelayReader(HyperDownloadManager manager, UploadCacheManager cacheManager, IShare share, List <string> basePaths)
        {
            _manager                   = manager;
            _cacheManager              = cacheManager;
            _share                     = share;
            _basePaths                 = basePaths;
            _share.TotalSharedChanged += _share_TotalSharedChanged;
            _updateTimer               = new Timer(o => RebuildDictionary(), null, Timeout.Infinite, Timeout.Infinite);

            SegmentService    = new MovingAverage(TimeSpan.FromSeconds(10));
            SegmentsPerSecond = new SpeedAverage(TimeSpan.FromSeconds(10));

            SegmentServiceProxy    = new MovingAverage(TimeSpan.FromSeconds(10));
            SegmentsPerSecondProxy = new SpeedAverage(TimeSpan.FromSeconds(10));

            SegmentServiceCached    = new MovingAverage(TimeSpan.FromSeconds(10));
            SegmentsPerSecondCached = new SpeedAverage(TimeSpan.FromSeconds(10));
        }
 public void RegisterRelayStorage(HyperDownloadManager downloadManager, UploadCacheManager cacheManager, IShare share, List <string> baseList)
 {
     AddStorage(new HyperRelayReader(downloadManager, cacheManager, share, baseList));
     Logger.Info($"Registered relay file storage {string.Join(", ", downloadManager.Sessions().Select(s => s.Server))}");
 }
Example #3
0
        public DcEngine(EngineSettings settings)
        {
            Settings          = settings;
            Settings.Changed += SettingsChanged;

            TagInfo = new TagInfo();

            Hubs             = new HubCollection();
            Hubs.HubAdded   += HubsHubAdded;
            Hubs.HubRemoved += HubsHubRemoved;

            SearchManager   = new SearchManager(this);
            DownloadManager = new DownloadManager(this);
            DownloadManager.DownloadAdding    += DownloadManagerDownloadAdding;
            DownloadManager.DownloadCompleted += DownloadManager_DownloadCompleted;

            TransferManager = new TransferManager(this);
            TransferManager.TransferAdded             += TransferManagerTransferAdded;
            TransferManager.TransferRemoved           += TransferManagerTransferRemoved;
            TransferManager.TransferUploadItemError   += TransferManagerTransferUploadItemError;
            TransferManager.TransferUploadItemRequest += TransferManager_TransferUploadItemRequest;

            SourceManager     = new SourceManager();
            FileSourceManager = new FileSourceManager();

            StatisticsManager = new StatisticsManager(this);

            UploadCacheManager = new UploadCacheManager(this);

            if (Settings.AutoSelectPort)
            {
                var tcpPort = Settings.TcpPort;
                var udpPort = Settings.UdpPort;

                while (!TcpConnectionListener.IsPortFree(tcpPort))
                {
                    tcpPort++;
                }
                if (Settings.TcpPort != tcpPort)
                {
                    Settings.TcpPort = tcpPort;
                }
                else
                {
                    InitTcp(Settings.TcpPort);
                }

                while (!UdpConnection.IsPortFree(udpPort))
                {
                    udpPort++;
                }
                if (Settings.UdpPort != udpPort)
                {
                    Settings.UdpPort = udpPort;
                }
                else
                {
                    InitUdp(Settings.UdpPort);
                }
            }
            else
            {
                InitUdp(Settings.UdpPort);
                InitTcp(Settings.TcpPort);
            }

            if (string.IsNullOrEmpty(Settings.LocalAddress))
            {
                // find local ip
                var host = Dns.GetHostEntry(Dns.GetHostName());

                //Array.Sort(host.AddressList, (one, two) => (one.ToString().StartsWith("192.168")?1:0)+ (two.ToString().StartsWith("192.168")?-1:0));

                foreach (var ip in host.AddressList)
                {
                    if (ip.AddressFamily.ToString() == "InterNetwork")
                    {
                        Settings.LocalAddress = ip.ToString();
                        break;
                    }
                }
            }

            if (Settings.HttpQueueLimit != 0)
            {
                HttpUploadItem.Manager.QueueLimit = Settings.HttpQueueLimit;
            }
            if (Settings.HttpConnectionsPerServer != 0)
            {
                HttpUploadItem.Manager.ConnectionsPerServer = Settings.HttpConnectionsPerServer;
            }
        }