Beispiel #1
0
        public Task <EigeneAbstimmungenModel> GetAbstimmung(Guid userId)
        {
            var dct = new Dictionary <string, EigeneAbstimmungModel>();

            foreach (var aktion in AktionenModel.GetAktionen().Aktionen)
            {
                dct.Add(aktion.Name, new EigeneAbstimmungModel(aktion.Name, 0, false));
            }
            var abstimmungen = this._Abstimmung.State.AktionProUser.Where((kv) => !string.IsNullOrEmpty(kv.Value));

            foreach (var abstimmung in abstimmungen)
            {
                if (dct.TryGetValue(abstimmung.Value, out var eigeneAbstimmung))
                {
                    eigeneAbstimmung.Anzahl++;
                    if (abstimmung.Key == userId)
                    {
                        eigeneAbstimmung.Eigene = true;
                    }
                }
            }

            var result = new EigeneAbstimmungenModel();

            result.EigeneAbstimmungen.AddRange(
                dct.Values.OrderBy(eigeneAbstimmung => eigeneAbstimmung.Aktion)
                );
            return(Task.FromResult <EigeneAbstimmungenModel>(result));
        }
Beispiel #2
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();
            }
        }
Beispiel #3
0
        public async Task KaufAktion(Guid userId, string aktion)
        {
            var aktionModel = AktionenModel.GetAktionen().Aktionen
                              .FirstOrDefault(m => string.Equals(m.Name, aktion, StringComparison.Ordinal));

            if (aktionModel is object)
            {
                var userModel = this._User.State;
                if (aktionModel.Level <= userModel.Money)
                {
                    userModel.Money -= aktionModel.Level;

                    if (aktionModel.ForAll)
                    {
                        userModel.Baumhaus.Add(aktionModel.Baumhaus, true);
                        userModel.Berg.Add(aktionModel.Berg, true);
                        userModel.Zelt.Add(aktionModel.Zelt, true);
                        await this._User.WriteStateAsync();

                        var abstimmungGrain = this.GrainFactory.GetGrain <IAbstimmungGrain>(0);
                        var allUserIds      = await abstimmungGrain.GetUserIds();

                        foreach (var id in allUserIds)
                        {
                            if (id == userId)
                            {
                                continue;
                            }
                            else
                            {
                                var userGrain = this.GrainFactory.GetGrain <IUserGrain>(id);
                                await userGrain.GewinnVerteilung(aktionModel);
                            }
                        }
                    }
                    else
                    {
                        userModel.Baumhaus.Add(aktionModel.Baumhaus, false);
                        userModel.Berg.Add(aktionModel.Berg, false);
                        userModel.Zelt.Add(aktionModel.Zelt, false);
                        await this._User.WriteStateAsync();
                    }
                }
            }
        }