public ActionResult <Player> RegisterPlayer(string key, Player player1, bool randomBoard = false) { //TODO: Fix replace player with just playername Player player = flyweightFactory.GetPlayer(player1.Name, Request.Headers.ContainsKey("PlayerIdentifier") ? Request.Headers["PlayerIdentifier"].ToString() : ""); if (player == null) { return(BadRequest("Name is taken. Go away thief")); } //Check Game OldGame = games.Find(game => game.Key == key); if (OldGame != null) { if (!Request.Headers.ContainsKey("PlayerIdentifier")) { return(StatusCode(403)); } if (!OldGame.HasPlayerWithIdentifier(Request.Headers["PlayerIdentifier"])) { return(StatusCode(403)); } OldGame.RebuildGame(player1); return(player1 = OldGame.Player1); } //-------------------------------------------------------------- GameBuilder builder = gameBuilders.Find(b => b.Key == key); if (builder == null) { return(NotFound()); } lock (gameBuilders) { builder.RegisterPlayer(player, randomBoard); if (!builder.LastOpSuccessful) { return(BadRequest("game full")); } lock (games) { Game game = builder.Finalize(games.Count); if (game != null) { games.Add(game); } } } return(player); }