Esempio n. 1
0
        public void AutoConfiguration()
        {
            logger.Info("Autoconfiguration started...");

            using (var wc = new WebClient())
            {
                wc.Encoding = Encoding.UTF8;

                var config = new ProviderConfiguration();
                _providerConfiguration = false;

                try
                {
                    logger.Info("Loading provider specific data http://dc.local/ISP_favorites.xml");
                    var xmlData = wc.DownloadString("http://dc.local/ISP_favorites.xml");
                    var xml     = new XmlSerializer(typeof(ProviderConfiguration));
                    logger.Info("Deserialization...");
                    config = (ProviderConfiguration)xml.Deserialize(new StringReader(xmlData));
                    _providerConfiguration = true;
                    logger.Info("Provider configuration sucessfully loaded");
                }
                catch (Exception e)
                {
                    logger.Error("Unable to load provider configuration: {0}", e.Message);
                }

                if (_providerConfiguration)
                {
                    if (!string.IsNullOrEmpty(config.LiveDcConfig.PortCheckUrl))
                    {
                        logger.Info("Using new port check url: {0}", config.LiveDcConfig.PortCheckUrl);
                        LiveApi.PortCheckUri  = config.LiveDcConfig.PortCheckUrl;
                        Settings.PortCheckUrl = config.LiveDcConfig.PortCheckUrl;
                        Settings.Save();
                    }

                    if (config.Hubs != null && config.Hubs.Count > 0)
                    {
                        logger.Info("Using provider hubs...");
                        Engine.Hubs.Clear();

                        foreach (var hubInfo in config.Hubs)
                        {
                            _hubManager.AddHub(hubInfo.Address);
                        }

                        Settings.Hubs = string.Join(";", config.Hubs.Select(h => DcHubManager.NormalizeHubAddress(h.Address)));
                        Settings.Save();
                    }
                }
            }

            LiveApi.CheckPortAsync(Settings.TCPPort, PortCheckComplete);
        }
Esempio n. 2
0
        public void Initialize()
        {
            var settings = EngineSettings.Default;

            settings.ActiveMode       = Settings.ActiveMode;
            settings.UseSparseFiles   = true;
            settings.AutoSelectPort   = true;
            settings.ReconnectTimeout = 45;

            if (Settings.TCPPort != 0)
            {
                settings.TcpPort = Settings.TCPPort;
            }

            if (Settings.UDPPort != 0)
            {
                settings.UdpPort = Settings.UDPPort;
            }

            _engine = new DcEngine(settings);
            _engine.TagInfo.Version = "livedc";

            _hubManager = new DcHubManager(this, _client);

            if (File.Exists(SharePath))
            {
                try
                {
                    _engine.Share = MemoryShare.CreateFromXml(SharePath);
                    _engine.Share.Reload();
                }
                catch (Exception x)
                {
                    logger.Error("Unable to load share from {0} because {1}", SharePath, x.Message);
                }
            }

            if (_engine.Share == null)
            {
                _engine.Share = new MemoryShare();
            }

            if (Settings.StorageAutoSelect)
            {
                _engine.Settings.PathDownload = StorageHelper.GetBestSaveDirectory();
            }
            else
            {
                _engine.Settings.PathDownload = Settings.StoragePath;
            }

            if (File.Exists(IncompletePath))
            {
                try
                {
                    _engine.DownloadManager.Load(IncompletePath);
                }
                catch (Exception x)
                {
                    logger.Error("Unable to load downloads {0}", x.Message);
                }
            }

            Settings.Nickname = "livedc" + Guid.NewGuid().ToString().GetMd5Hash().Substring(0, 8);

            _engine.ActiveStatusChanged += delegate { OnStatusChanged(); };

            _engine.StartAsync();
            _engine.Connect();

            if (!string.IsNullOrEmpty(Settings.PortCheckUrl))
            {
                LiveApi.PortCheckUri = Settings.PortCheckUrl;
            }

            ThreadPool.QueueUserWorkItem(o => AutoConfiguration());
        }