public static Account CreateAccount(string username, string nickname, int playerId, byte[] salt, byte[] hash)
        {
            using (DatabaseContainer dc = new DatabaseContainer())
            {
                if (dc.Accounts.FirstOrDefault(a => a.Username == username) != null)
                {
                    throw new ArgumentException($"Username: {username} is already taken");
                }

                Player player = dc.Players.FirstOrDefault(p => p.Id == playerId) ?? CreatePlayer(nickname);

                Account account = new Account()
                {
                    Username = username,
                    Player = player,
                    Salt = Encoding.ASCII.GetString(salt),
                    Hash = Encoding.ASCII.GetString(hash)
                };

                player.Account = account;

                dc.Accounts.Add(account);
                dc.SaveChanges();
                return account;
            }
        }
Beispiel #2
0
 public static IQueryable<Player> GetTopPlayers()
 {
     using (DatabaseContainer dc = new DatabaseContainer())
     {
         return dc.Players.Select(p => p).OrderByDescending(p => p.HighScore).Take(5);
     }
 }
Beispiel #3
0
 public static void SaveChanges()
 {
     using (DatabaseContainer dc = new DatabaseContainer())
     {
         dc.SaveChanges();
     }
 }
Beispiel #4
0
        public static Account CreateAccount(string username, string nickname, int playerId, byte[] salt, byte[] hash)
        {
            using (DatabaseContainer dc = new DatabaseContainer())
            {
                if (dc.Accounts.FirstOrDefault(a => a.Username == username) != null)
                {
                    throw new ArgumentException($"Username: {username} is already taken");
                }

                Player player = dc.Players.FirstOrDefault(p => p.Id == playerId) ?? CreatePlayer(nickname);
                Account account = new Account()
                {
                    Username = username,
                    Player = player,
                    Salt = Convert.ToBase64String(salt),
                    Hash = Convert.ToBase64String(hash)
                };

                player.Account = account;
                dc.Accounts.Add(account);
                dc.Entry(player).State = EntityState.Modified; // Avoid making duplicate players.

                dc.SaveChanges();
                return account;
            }
        }
 public static Player[] GetHighestScoringPlayers()
 {
     using (DatabaseContainer dc = new DatabaseContainer())
     {
         return dc.Players.Select(p => p).OrderByDescending(p => p.HighScore).Take(100).ToArray();
             // TODO maybe let the quantity be a parameter
     }
 }
Beispiel #6
0
 /// <summary>
 /// Adds gold to the player.
 /// </summary>
 /// <param name="observable"></param>
 /// <param name="data"></param>
 private void AddGold(Observable observable, object data)
 {
     Gold += 10;
     using (DatabaseContainer dc = new DatabaseContainer())
     {
         dc.Entry(this).State = EntityState.Modified;
         dc.SaveChanges();
     }
 }
 public static Player CreatePlayer(string nickname)
 {
     using (DatabaseContainer dc = new DatabaseContainer())
     {
         Player player = new Player() { Nickname = nickname }; // TODO: dynamic account.
         dc.Players.Add(player);
         dc.SaveChanges();
         return player;
     }
 }
Beispiel #8
0
 public static Account GetAccount(Expression<Func<Account, bool>> predicate)
 {
     using (DatabaseContainer dc = new DatabaseContainer())
     {
         // TODO determine whether or not Player should be included here.
         // If not we must load it later or it causes an objectdisposedexception.
         // Alternatively we can remove nagivation properties from the entity and use foreign keys
         // in form of Player.Id instead. That will require loading player by Id for every use however.
         return dc.Accounts.Include(a => a.Player).First(predicate);
     }
 }
Beispiel #9
0
        private void DestroyEvent(Observable observable, object data)
        {
            if (CurrentCharacter.HighScore > this.HighScore)
            {
                this.HighScore = CurrentCharacter.HighScore;
            }

            using (DatabaseContainer dc = new DatabaseContainer())
            {
                dc.Entry(this).State = EntityState.Modified;
                dc.SaveChanges();
            }
        }