Ejemplo n.º 1
0
        /// <summary>
        /// Looks for all invites to the provided game session. If all are accepted, start the game.
        /// </summary>
        /// <param name="guid"></param>
        public void AttemptGameStart(DB_Game da_game)
        {
            var gameInvites = from i in _context.DB_Invites where i.GameId == da_game.Id select i;

            if (gameInvites.Count <DB_Invite>() < 5)
            {
                throw new FOEServiceException(FOEStatusCodes.InternalError, "Game start attempted with fewer than 5 players");
            }

            //Check if all invites are accepted. else we just wont start the game.
            bool           allInvitesAccepted = true;
            List <DB_User> invitedUsers       = new List <DB_User>();

            foreach (DB_Invite invite in gameInvites)
            {
                if (invite.Status != (int)DB_Invite.InviteStatus.Accepted)
                {
                    allInvitesAccepted = false;
                    break;
                }
                invitedUsers.Add((from u in _context.DB_Users where u.Id == invite.InvitedUser.Value select u).FirstOrDefault());
            }

            if (allInvitesAccepted == true)
            {
                //Randomize which user that plays which nation.
                //TODO: Add ability to pick nations?
                Random  rnd     = new Random();
                DB_User da_user = invitedUsers.OrderBy(x => rnd.Next()).FirstOrDefault();
                da_game.GermanPlayer = da_user.Id;
                SendEventToUser(da_user.ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                invitedUsers.Remove(da_user);

                da_user = invitedUsers.OrderBy(x => rnd.Next()).FirstOrDefault();
                da_game.JapanesePlayer = da_user.Id;
                SendEventToUser(da_user.ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                invitedUsers.Remove(da_user);

                da_user = invitedUsers.OrderBy(x => rnd.Next()).FirstOrDefault();
                da_game.AmericanPlayer = da_user.Id;
                SendEventToUser(da_user.ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                invitedUsers.Remove(da_user);

                da_user = invitedUsers.OrderBy(x => rnd.Next()).FirstOrDefault();
                da_game.EnglishPlayer = da_user.Id;
                SendEventToUser(da_user.ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                invitedUsers.Remove(da_user);

                da_game.RussianPlayer = invitedUsers.FirstOrDefault().Id;
                SendEventToUser(invitedUsers.FirstOrDefault().ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                da_game.IsActive = true;
                da_game.Phase    = (int)DB_Game.GamePhases.Buy;
                da_game.Turn     = 0;

                _context.DB_Invites.DeleteAllOnSubmit(gameInvites);
                _context.SubmitChanges();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Looks up the loginSession provided and returns the user saved in that session.
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public User GetUserBySession(Guid session)
        {
            DB_User da_user = (from s in _context.DB_LoginSessions where s.Id == session select s.DB_User).FirstOrDefault();

            if (da_user == null)
            {
                throw new FOEServiceException(FOEStatusCodes.InvalidSession);
            }

            return(da_user.ToUser(FOEDataInclusion.Everything));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// returns a User if found in the database, else throws an exception.
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        public User GetUserByUserName(string userName)
        {
            DB_User da_user = (from u in _context.DB_Users where u.UserName == userName select u).FirstOrDefault();

            if (da_user == null)
            {
                throw new FOEServiceException(FOEStatusCodes.UnknownUser, string.Format("Could not find user {0}.", userName));
            }

            return(da_user.ToUser(FOEDataInclusion.Everything));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Adds a user to the database
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="password"></param>
        /// <param name="email"></param>
        /// <returns></returns>
        public User AddUser(string userName, string password, string email)
        {
            DB_User da_user = DB_User.FromUser(new User()
            {
                Password = password, UserName = userName
            }, _context);

            if (da_user == null)
            {
                throw new FOEServiceException(FOEStatusCodes.InternalError, "Creation of user failed.");
            }

            return(da_user.ToUser(FOEDataInclusion.Everything));
        }