Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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();
        }