예제 #1
0
 public void AddGesammtTeilnehmer(AktionModel value)
 {
     if (value.ForAll)
     {
         this.Baumhaus += value.Baumhaus;
         this.Zelt     += value.Zelt;
         this.Berg     += value.Berg;
     }
 }
예제 #2
0
 public void AddNichtTeilnehmer(AktionModel value)
 {
     if (!value.ForAll)
     {
         this.Baumhaus -= Math.Abs(value.Baumhaus);
         this.Zelt     -= Math.Abs(value.Zelt);
         this.Berg     -= Math.Abs(value.Berg);
     }
 }
예제 #3
0
        public async Task GewinnVerteilung(AktionModel aktionModel)
        {
            var userModel = this._User.State;

            userModel.Baumhaus.Add(aktionModel.Baumhaus, true);
            userModel.Berg.Add(aktionModel.Berg, true);
            userModel.Zelt.Add(aktionModel.Zelt, true);
            await this._User.WriteStateAsync();
        }
예제 #4
0
        public async Task GewinnVerteilung()
        {
            var aktionProUser   = this._Abstimmung.State.AktionProUser;
            var aktionenDerUser = aktionProUser.Where(kv => !string.IsNullOrEmpty(kv.Value)).ToList();
            var aktionen        = AktionenModel.GetAktionen();
            var count           = aktionenDerUser.Count;

            if (count > 0)
            {
                var grpByAktion      = aktionenDerUser.GroupBy(i => i.Value);
                var maxCount         = grpByAktion.Max(grp => grp.Count());
                var gewinnerAktionen = grpByAktion.Where(grp => (grp.Count() == maxCount))
                                       .Select(grp => grp.Key)
                                       .ToDictionary(aktion => aktion, aktion => aktionen.FindAktion(aktion));

                var verliehrerAktion      = new AktionModel(string.Empty, 0, 0f, 0f, 0f, false);
                var nichtTeilnehmerAktion = new AktionModel(string.Empty, 0, 0f, 0f, 0f, false);
                var gewinnerAktion        = new AktionModel(string.Empty, 0, 0f, 0f, 0f, false);
                var gesammtAktion         = new AktionModel(string.Empty, 0, 0f, 0f, 0f, false);
                foreach (var aktuelleGewinnerAktion in gewinnerAktionen.Where(kv => (kv.Value is object) && (kv.Value.ForAll)))
                {
                    nichtTeilnehmerAktion.AddGesammtTeilnehmer(aktuelleGewinnerAktion.Value !);
                    verliehrerAktion.AddGesammtTeilnehmer(aktuelleGewinnerAktion.Value !);
                    gewinnerAktion.AddGesammtTeilnehmer(aktuelleGewinnerAktion.Value !);
                }
                foreach (var aktuelleGewinnerAktion in gewinnerAktionen.Where(kv => (kv.Value is object) && (!kv.Value.ForAll)))
                {
                    nichtTeilnehmerAktion.AddNichtTeilnehmer(aktuelleGewinnerAktion.Value !);
                    verliehrerAktion.AddVerliehrer(aktuelleGewinnerAktion.Value !);
                    gewinnerAktion.AddGewinner(aktuelleGewinnerAktion.Value !);
                }
                foreach (var kv in aktionProUser.ToList())
                {
                    var        userId    = kv.Key;
                    IUserGrain userGrain = this.GrainFactory.GetGrain <IUserGrain>(userId);
                    if (string.IsNullOrEmpty(kv.Value))
                    {
                        await userGrain.GewinnVerteilung(nichtTeilnehmerAktion);
                    }
                    else if (gewinnerAktionen.TryGetValue(kv.Value, out var aktion))
                    {
                        await userGrain.GewinnVerteilung(gewinnerAktion);
                    }
                    else
                    {
                        await userGrain.GewinnVerteilung(verliehrerAktion);
                    }
                    aktionProUser[userId] = string.Empty;
                }

                await this._Abstimmung.WriteStateAsync();
            }
        }
예제 #5
0
 public void AddVerliehrer(AktionModel value)
 {
     if (!value.ForAll)
     {
         if (value.Baumhaus < 0)
         {
             this.Baumhaus += value.Baumhaus;
         }
         if (value.Zelt < 0)
         {
             this.Zelt += value.Zelt;
         }
         if (value.Berg < 0)
         {
             this.Berg += value.Berg;
         }
     }
 }
예제 #6
0
 public void AddGewinner(AktionModel value)
 {
     if (!value.ForAll)
     {
         if (value.Baumhaus > 0)
         {
             this.Baumhaus += value.Baumhaus;
         }
         if (value.Zelt > 0)
         {
             this.Zelt += value.Zelt;
         }
         if (value.Berg > 0)
         {
             this.Berg += value.Berg;
         }
     }
 }