static void Main(string[] args) { if (args.Length > 2) { args[0] = "dev"; var count = int.Parse(args[1]); for (int i = 0; i < count; i++) { Task.Run(() => { CreateInstance(i); }); } } else { // instance 1 var appInfo = AppInfo.CreateCurrent(); var appSettings = new AppInstanceSettings() { EnableUdpDiscoveryListener = true, EnableUdpDiscoveryClient = true, DownloadEverything = false }; var instance = new AppInstance(appInfo); instances.Add(instance); var bootstrapper = instance.Start(appSettings); } //Task.Run(() => { CreateInstance(1); }); Console.ReadLine(); Stop(); }
public AppInstanceBootstrapper Start(AppInstanceSettings settings) { if (settings == null) { throw new ArgumentNullException(nameof(settings)); } if (isStarted) { throw new InvalidOperationException("Already started."); } isStarted = true; appInfo.LogStart(); appInfo.Validate(); // configure services string urls = $"http://*:{appInfo.NetworkSettings.TcpServicePort}"; string exeFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); webHost = new WebHostBuilder() .UseKestrel(c => { // extend grace period so server don't kick peer waiting for opening file etc. c.Limits.MinResponseDataRate = new MinDataRate(240, TimeSpan.FromSeconds(20)); }) .UseEnvironment("Development") .UseContentRoot(Path.Combine(exeFolder, "WebInterface")) .UseUrls(urls) .ConfigureServices(ConfigureService) .UseStartup <HttpStartup>() .Build(); // start webHost.Start(); // bootstrap var result = webHost.Services.GetRequiredService <AppInstanceBootstrapper>(); result.Start(settings); return(result); }
private static void CreateInstance(int index) { // instance n var appInfo = AppInfo.CreateCurrent(); appInfo.NetworkSettings.TcpServicePort += (ushort)(index); appInfo.DataRootPath = @"c:\temp\temp" + index; var appSettings = new AppInstanceSettings() { EnableUdpDiscoveryListener = (index == 0), EnableUdpDiscoveryClient = true, DownloadEverything = false }; var instance = new AppInstance(appInfo); instances.Add(instance); var bootstrapper = instance.Start(appSettings); }
public void Start(AppInstanceSettings settings) { if (settings.DownloadEverything) { PackageRegistry.RemotePackageDiscovered += (package) => { if (PackageDownloadManager.GetDiscoveredPackageAndStartDownloadPackage(package, out var task)) { task.Wait(); } }; } UdpPeerDiscovery.EnableAutoSearch( allowListener: settings.EnableUdpDiscoveryListener, allowClient: settings.EnableUdpDiscoveryClient ); PackageDownloadManager.RestoreUnfinishedDownloads(); }