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 }); }
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 }); }
/// <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); }