コード例 #1
0
        private void ProcessPeers()
        {
            if (Interlocked.Exchange(ref isProcessPeers, 1) == 1)
            {
                return;
            }

            foreach (var peer in Peers.OrderByDescending(x => x.Value.PiecesRequiredAvailable))
            {
                if (DateTime.UtcNow > peer.Value.LastActive.Add(peerTimeout))
                {
                    peer.Value.Disconnect();
                    continue;
                }

                if (!peer.Value.IsHandshakeSent || !peer.Value.IsHandshakeReceived)
                {
                    continue;
                }

                if (Torrent.IsCompleted)
                {
                    peer.Value.SendNotInterested();
                }
                else
                {
                    peer.Value.SendInterested();
                }

                if (peer.Value.IsCompleted && Torrent.IsCompleted)
                {
                    peer.Value.Disconnect();
                    continue;
                }

                peer.Value.SendKeepAlive();

                // let them leech
                if (Torrent.IsStarted && Leechers.Count < maxLeechers)
                {
                    if (peer.Value.IsInterestedReceived && peer.Value.IsChokeSent)
                    {
                        peer.Value.SendUnchoke();
                    }
                }

                // ask to leech
                if (!Torrent.IsCompleted && Seeders.Count <= maxSeeders)
                {
                    if (!peer.Value.IsChokeReceived)
                    {
                        Seeders.TryAdd(peer.Key, peer.Value);
                    }
                }
            }

            Interlocked.Exchange(ref isProcessPeers, 0);
        }
コード例 #2
0
        private void HandlePeerDisconnected(object sender, EventArgs args)
        {
            if (sender is Peer peer)
            {
                peer.BlockRequested -= HandleBlockRequested;
                peer.BlockCancelled -= HandleBlockCancelled;
                peer.BlockReceived  -= HandleBlockReceived;
                peer.Disconnected   -= HandlePeerDisconnected;
                peer.StateChanged   -= HandlePeerStateChanged;

                Peers.TryRemove(peer.Key, out _);
                Seeders.TryRemove(peer.Key, out _);
                Leechers.TryRemove(peer.Key, out _);
            }
        }
コード例 #3
0
ファイル: Client.cs プロジェクト: emrahsungu/Hes.BitTorrent
        private void HandlePeerDisconnected(object sender, EventArgs args)
        {
            var peer = sender as Peer;

            peer.BlockRequested -= HandleBlockRequested;
            peer.BlockCancelled -= HandleBlockCancelled;
            peer.BlockReceived  -= HandleBlockReceived;
            peer.Disconnected   -= HandlePeerDisconnected;
            peer.StateChanged   -= HandlePeerStateChanged;

            Peer tmp;

            Peers.TryRemove(peer.Key, out tmp);
            Seeders.TryRemove(peer.Key, out tmp);
            Leechers.TryRemove(peer.Key, out tmp);
        }
コード例 #4
0
        protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            builder.ConfigureServices(services =>
            {
                services.Remove(services.SingleOrDefault(s => s.ServiceType == typeof(DbContextOptions <ApplicationDbContext>)));
                services.Remove(services.SingleOrDefault(s => s.ServiceType == typeof(DbContextOptions <IdentityContext>)));

                services.AddDbContext <ApplicationDbContext>(options =>
                {
                    options.UseInMemoryDatabase($"{typeof(T).Name}-ApplicationDbContextInMemoryForTesting");
                });

                services.AddDbContext <IdentityContext>(options =>
                {
                    options.UseInMemoryDatabase($"{typeof(T).Name}-IdentityContextInMemoryForTesting");
                });

                services.AddSingleton <IStartupFilter, CustomStartupFilter>();

                var sp = services.BuildServiceProvider();

                using (var scope = sp.CreateScope())
                {
                    var scopedServices       = scope.ServiceProvider;
                    var applicationDbContext = scopedServices.GetRequiredService <ApplicationDbContext>();
                    var identityContext      = scopedServices.GetRequiredService <IdentityContext>();
                    var userManager          = scopedServices.GetRequiredService <UserManager <ApplicationUser> >();
                    var roleManager          = scopedServices.GetRequiredService <RoleManager <IdentityRole> >();
                    var logger = scopedServices.GetRequiredService <ILogger <CustomWebApplicationFactory <T> > >();

                    applicationDbContext.Database.EnsureCreated();
                    identityContext.Database.EnsureCreated();

                    try
                    {
                        Seeders.SeedDefaultRoles(roleManager);
                    }
                    catch (Exception ex)
                    {
                        logger.LogError(ex, $"Error seeding the database. Error: {ex.Message}.");
                    }
                }
            });
        }
コード例 #5
0
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, RoleManager <IdentityRole> roleMgr, UserManager <Gebruiker> userMgr, AstrologyQuizDbContext context)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

            app.UseCors(builder => {
                builder.WithOrigins("http://localhost:3000")
                .AllowAnyHeader()
                .AllowAnyMethod()
                .AllowCredentials();
            });

            app.UseHttpsRedirection();

            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Quiz}/{action=Index}/{id?}");
                endpoints.MapRazorPages();
            });

            Seeders.SeedRoles(roleMgr).Wait();

            Seeders.SeedUsers(userMgr).Wait();
        }
コード例 #6
0
        public void UpdateUi(bool first)
        {
            MainWindow form = Program.Form;

            if (form.InvokeRequired)
            {
                form.Invoke(new UpdateUIDelegate(UpdateUi), new object[] { first });
                return;
            }
            SetText(1, Id.ToString());
            SubItems[1].Tag = Id;
            SetText(2, Toolbox.GetFileSize(SizeWhenDone));
            SubItems[2].Tag = SizeWhenDone;
            SetText(3, Percentage + "%");
            SubItems[3].Tag = Percentage;
            SetText(4, Status);
            SetText(5, string.Format(_seedersColumnFormat, Seeders < 0 ? "?" : Seeders.ToString(), PeersSendingToUs));
            SubItems[5].Tag = Seeders;
            SetText(6, string.Format(_seedersColumnFormat, Leechers < 0 ? "?" : Leechers.ToString(), PeersGettingFromUs));
            SubItems[6].Tag = Leechers;
            SetText(7, DownloadRate > 0 ? Toolbox.GetSpeed(DownloadRate) : "");
            SubItems[7].Tag = DownloadRate;
            SetText(8, UploadRate > 0 ? Toolbox.GetSpeed(UploadRate) : "");
            SubItems[8].Tag = UploadRate;
            SetText(9, Eta > 0 ? TimeSpan.FromSeconds(Eta).ToString() : "");
            SubItems[9].Tag = Eta;
            SetText(10, Toolbox.GetFileSize(Uploaded));
            SubItems[10].Tag = Uploaded;
            SetText(11, LocalRatio < 0 ? "∞" : LocalRatio.ToString());
            SubItems[11].Tag       = LocalRatio;
            SubItems[11].ForeColor = GetRatioColor();
            SetText(12, Added.ToString());
            SubItems[12].Tag = Added;
            if (DoneDate != null)
            {
                SubItems[13].Tag = DoneDate;
                SetText(13, DoneDate.ToString());
            }
            SetText(14, FirstTrackerTrimmed);

            if (first)
            {
                lock (form.stateListBox)
                {
                    if (FirstTrackerTrimmed.Length > 0 && form.stateListBox.FindItem(FirstTrackerTrimmed) == null)
                    {
                        form.stateListBox.Items.Add(new GListBoxItem(FirstTrackerTrimmed, 9));
                    }
                }
                if (Program.Settings.MinToTray && Program.Settings.StartedBalloon && _updateSerial > 2)
                {
                    form.ShowTrayTip(LocalSettingsSingleton.BALLOON_TIMEOUT, TorrentName, String.Format(OtherStrings.NewTorrentIs, Status.ToLower()), ToolTipIcon.Info);
                }
                LogError();
            }
            else if (Program.Settings.MinToTray && CompletionPopupPending)
            {
                CompletionPopupPending = false;
                form.ShowTrayTip(LocalSettingsSingleton.BALLOON_TIMEOUT, TorrentName, OtherStrings.TorrentFinished, ToolTipIcon.Info);
            }
            ForeColor = HasError ? Color.Red : SystemColors.WindowText;
            UpdateIcon();
        }
コード例 #7
0
 protected override void FeedSeeder()
 {
     Seeders.Add(AddTypeDePropriete());
     Seeders.Add(AddTypeDePiece());
 }