Example #1
0
 private GameInfo JoinAsPlayerOne(JoinInfo user, Game g)
 {
     g.PlayerOne = user;
     g.ID        = activeGames.Count + completedGames.Count + pendingGames.Count + 1 + "";
     g.GameState = Game.Status.pending;
     SetStatus(Accepted);
     return(new GameInfo()
     {
         GameID = g.ID
     });
 }
Example #2
0
 private GameInfo JoinAsPlayerTwo(JoinInfo user, Game g)
 {
     g.PlayerTwo = user;
     g.TimeLimit = (g.PlayerOne.TimeLimit + user.TimeLimit) / 2;
     g.Board     = new BoggleBoard();
     g.GameState = Game.Status.active;
     SetStatus(Created);
     return(new GameInfo()
     {
         GameID = g.ID
     });
 }
Example #3
0
 /// <summary>
 /// Handles joining a pending Boggle game.
 /// </summary>
 /// <param name="user">Data detailing the user token and the time of the match</param>
 /// <returns>Data containing the game's ID.</returns>
 public GameInfo Join(JoinInfo user)
 {
     if (!string.IsNullOrEmpty(user.UserToken) && users.ContainsKey(user.UserToken) && user.TimeLimit >= 5 && user.TimeLimit <= 120)
     {
         if (!InGame(user.UserToken, pendingGames))
         {
             Game g;
             if (pendingGames.TryDequeue(out g))
             {
                 if (g.PlayerOne != null)
                 {
                     GameInfo info = JoinAsPlayerTwo(user, g);
                     activeGames.TryAdd(g.ID, g);
                     g.Start();
                     return(info);
                 }
                 else
                 {
                     return(JoinAsPlayerOne(user, g));
                 }
             }
             else
             {
                 g           = new Game();
                 g.PlayerOne = user;
                 g.ID        = activeGames.Count + completedGames.Count + pendingGames.Count + 1 + "";
                 g.GameState = Game.Status.pending;
                 pendingGames.Enqueue(g);
                 SetStatus(Accepted);
                 return(new GameInfo()
                 {
                     GameID = g.ID
                 });
             }
         }
         SetStatus(Conflict);
         return(null);
     }
     SetStatus(Forbidden);
     return(null);
 }
            /// <summary>
            /// receive the data from the http which seted by the users
            /// choose the right arguemnet and work on it
            /// </summary>
            /// <param name="httpRequestData"></param>
            /// <param name="status"></param>
            /// <returns></returns>
            private dynamic RunServiceMethod(dynamic httpRequestData, out HttpStatusCode status)
            {
                dynamic infoOut = null;

                status = HttpStatusCode.NotFound;
                // find the right arguement and do it
                switch ((string)httpRequestData.serviceMethod)
                {
                case "POST":
                    switch ((string)httpRequestData.directory)
                    {
                    case "users":
                        RegisterInfo registerInfoIn = JsonConvert.DeserializeObject <RegisterInfo>(httpRequestData.contentIn);
                        infoOut = Register(registerInfoIn, out status);
                        break;

                    case "games":
                        JoinInfo joinInfoIn = JsonConvert.DeserializeObject <JoinInfo>(httpRequestData.contentIn);
                        infoOut = Join(joinInfoIn, out status);
                        break;

                    default:
                        break;
                    }
                    break;

                case "PUT":
                    switch ((string)httpRequestData.directory)
                    {
                    case "games":
                        if (Regex.IsMatch((string)httpRequestData.parameters, @"^.+$"))
                        {
                            PlayInfo playInfoIn = JsonConvert.DeserializeObject <PlayInfo>(httpRequestData.contentIn);
                            infoOut = PlayWord((string)httpRequestData.parameters, playInfoIn, out status);
                        }
                        else if (Regex.IsMatch((string)httpRequestData.parameters, @"^$"))
                        {
                            UserInfo userInfoIn = JsonConvert.DeserializeObject <UserInfo>(httpRequestData.contentIn);
                            CancelJoin(userInfoIn, out status);
                        }
                        break;

                    default:
                        break;
                    }
                    break;

                case "GET":
                    switch ((string)httpRequestData.directory)
                    {
                    case "games":
                        if (Regex.IsMatch((string)httpRequestData.parameters, @"^.+(\?)(brief|Brief)(=)(yes|no)$"))
                        {
                            string[] theParameters = httpRequestData.parameters.Split('?');
                            infoOut = GameStatus(theParameters[0], theParameters[1].Split('=')[1], out status);
                        }
                        else if (Regex.IsMatch((string)httpRequestData.parameters, @"^.+$"))
                        {
                            infoOut = GameStatus(httpRequestData.parameters, null, out status);
                        }
                        break;

                    default:
                        break;
                    }
                    break;

                default:
                    break;
                }
                return(infoOut);
            }