Beispiel #1
0
        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);
        }