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