Example #1
0
        public void InvalidPlayer()
        {
            List <Guid> players = new List <Guid>();

            players.Add(User.createUser("Amir").ID);
            players.Add(User.createUser("Budi").ID);
            players.Add(User.createUser("Carlie").ID);
            players.Add(User.createUser("Darlie").ID);

            List <int> UserRole = new List <int>();

            UserRole.Add(1);
            UserRole.Add(2);
            UserRole.Add(2);
            UserRole.Add(2);

            Exception res = null;

            try
            {
                WolfNet ww = new WerewolfGame(players, UserRole);
            }
            catch (Exception e)
            {
                res = e;
            }
            Assert.True(res != null);
        }
Example #2
0
        public async Task GamesResponseAsync()
        {
            WerewolfGame g = new WerewolfGame();
            EmbedBuilder e = new EmbedBuilder();

            e.WithColor(EmbedData.GetColor("error"));
            e.WithTitle("Ori's Arcade Zone");
            e.WithDescription($"{g.Status} **{g.Name}**\n{g.Summary}");//"The arcade is currently closed. Please hang tight while the arcade is being repaired. Sorry about that.");
            e.WithFooter("The arcade is currently closed. :(");
            await ReplyAsync(embed : e.Build());
        }
        protected HTTPResponse WerewolfProcess(HTTPRequest httpRequest, string[] requests, string method)
        {
            HTTPResponse response       = new HTTPResponse(200);
            WerewolfGame werewolf       = new WerewolfGame();
            string       path           = requests[0].ToUpper();
            string       action         = method.ToUpper();
            int          request_length = requests.Length;

            response.Type = "application/json";

            if (path == REQUEST_PLAYER)
            {
                if (action == HTTP_GET)
                {
                    if (request_length == 1) //player/
                    {
                        try
                        {
                            List <Player> players = werewolf.GetPlayers().OrderBy(p => p.Id).ToList();
                            foreach (Player player in players)
                            {
                                player.Role     = null;
                                player.Session  = "";
                                player.Password = "";
                                player.Game     = null;
                            }
                            response.SetBodyJson(players);
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                    }
                    else if (request_length == 2) //player/{id}
                    {
                        string id = requests[1];
                        try
                        {
                            Player player = werewolf.GetPlayer(id);
                            player.Role     = null;
                            player.Session  = "";
                            player.Password = "";
                            player.Game     = null;
                            response.SetBodyJson(player);
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 404;
                            return(response);
                        }
                    }
                    else if (request_length == 3) //player/logout/{sessionID}
                    {
                        if (requests[1].ToUpper() == "LOGOUT")
                        {
                            try
                            {
                                string session = requests[2];
                                Player player  = werewolf.GetPlayerBySession(session);
                                player.Session = "";
                                werewolf.UpdatePlayer(player);
                                response.Status = 200;
                                return(response);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.Status = 404;
                                return(response);
                            }
                        }
                        else if (requests[1].ToUpper() == "FINDBYGAME") //player/findByGame/{id}
                        {
                            string gameid = requests[2];
                            try
                            {
                                List <Player> players = werewolf.GetPlayerByGame(gameid).OrderBy(p => p.Id).ToList();
                                foreach (Player player in players)
                                {
                                    player.Session  = "";
                                    player.Password = "";
                                }
                                response.SetBodyJson(players);
                                return(response);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.Status = 404;
                                return(response);
                            }
                        }
                    }
                }
                else if (action == HTTP_POST)
                {
                    if (request_length == 1) //player/
                    {
                        try
                        {
                            Player player = JsonConvert.DeserializeObject <Player>(httpRequest.Body);
                            if (werewolf.IsPlayerExists(player.Name))
                            {
                                response.Status = 403;
                                return(response);
                            }
                            player.Status = Player.StatusEnum.NotInGameEnum;
                            werewolf.AddPlayer(player);
                            player          = werewolf.GetPlayerByName(player.Name);
                            player.Session  = "";
                            player.Password = "";
                            response.SetBodyJson(player);
                            response.Status = 201;
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                    }
                    else if (request_length == 2)
                    {
                        if (requests[1].ToUpper() == "LOGIN")
                        {
                            try
                            {
                                Player p = JsonConvert.DeserializeObject <Player>(httpRequest.Body);
                                if (p == null)
                                {
                                    response.Status = 400;
                                    return(response);
                                }
                                try
                                {
                                    Player player = werewolf.GetPlayerByName(p.Name);
                                    if (player.Password != p.Password || player.Name != p.Name)
                                    {
                                        response.SetBodyString("{\"description\":\"User not found or password is incorrect.\"}");
                                        response.Status = 404;
                                        return(response);
                                    }
                                    player.Session = Guid.NewGuid().ToString();
                                    player.Game    = null;
                                    player.GameId  = null;
                                    werewolf.UpdatePlayer(player);
                                    player.Password = "";
                                    response.SetBodyJson(player);
                                    response.Status = 201;
                                    return(response);
                                }
                                catch (Exception)
                                {
                                    response.SetBodyString("{\"description\":\"User not found or password is incorrect.\"}");
                                    response.Status = 404;
                                    return(response);
                                }
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.Status = 400;
                                return(response);
                            }
                        }
                    }
                }
                else if (action == HTTP_PUT)
                {
                    try
                    {
                        Player player = JsonConvert.DeserializeObject <Player>(httpRequest.Body);
                        werewolf.UpdatePlayer(player);
                        response.Status = 200;
                        return(response);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                        response.Status = 400;
                        return(response);
                    }
                }
                else if (action == HTTP_DELETE)
                {
                    if (request_length == 2) //player/{id}
                    {
                        string id = requests[1];
                        try
                        {
                            werewolf.DeletePlayer(id);
                            response.Status = 200;
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 404;
                            return(response);
                        }
                    }
                }
            }
            else if (path == REQUEST_GAME)
            {
                if (action == HTTP_GET)
                {
                    if (request_length == 1) //game
                    {
                        List <DNWS.Werewolf.Game> games;
                        try
                        {
                            games = werewolf.GetGames().OrderBy(a => a.Id).ToList();
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                        foreach (DNWS.Werewolf.Game g in games)
                        {
                            foreach (Player player in g.Players)
                            {
                                if (werewolf.IsPlayerDead(player.Id.ToString()))
                                {
                                    Player p = werewolf.GetPlayer(player.Id.ToString());
                                    player.Role = p.Role;
                                }
                                else
                                {
                                    player.Role = null;
                                }
                                player.Password = "";
                                player.Session  = "";
                                player.Game     = null;
                            }
                        }
                        try
                        {
                            response.SetBodyJson(games);
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                    }
                    else if (request_length == 2) //game/{id}
                    {
                        string id = requests[1];
                        Game   g;
                        try
                        {
                            g = werewolf.GetGame(id);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 404;
                            return(response);
                        }
                        List <Player> players = new List <Player>();
                        foreach (Player player in g.Players)
                        {
                            player.Role     = null;
                            player.Password = "";
                            player.Session  = "";
                            player.Game     = null;
                        }
                        try
                        {
                            response.SetBodyJson(g);
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                    }
                    else if (request_length == 3) //game/session/{sessionID}
                    {
                        if (requests[1].ToUpper() == "SESSION")
                        {
                            Game   game;
                            Player player;
                            string sessionID = requests[2];
                            try
                            {
                                player = werewolf.GetPlayerBySession(sessionID);
                            }
                            catch (Exception ex)
                            {
                                // Player not found
                                Console.WriteLine(ex.ToString());
                                response.Status = 400;
                                return(response);
                            }
                            try {
                                if (player == null)
                                {
                                    response.Status = 400;
                                    return(response);
                                }
                                game = player.Game;
                                if (game == null)
                                {
                                    response.Status = 404;
                                    return(response);
                                }
                                foreach (Player p in game.Players)
                                {
                                    if (p.Id == player.Id)
                                    {
                                        if (p.Role != null)
                                        {
                                            p.Role.ActionRoles = null;
                                        }
                                    }
                                    else if (werewolf.IsPlayerDead(p.Id.ToString()))
                                    {
                                        if (p.Role != null)
                                        {
                                            p.Role.ActionRoles = null;
                                        }
                                    }
                                    else
                                    {
                                        p.Role = null;
                                    }
                                    p.Password = "";
                                    p.Session  = "";
                                    p.Game     = null;
                                }
                                response.Status = 200;
                                response.SetBodyJson(game);
                                return(response);
                            } catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.Status = 400;
                                return(response);
                            }
                        }
                    }
                }
                else if (action == HTTP_POST)
                {
                    if (request_length == 3) //game/session/{sessionID}
                    {
                        if (requests[1].ToUpper() == "SESSION")
                        {
                            Game   game;
                            Player player;
                            string sessionID = requests[2];
                            try
                            {
                                player = werewolf.GetPlayerBySession(sessionID);
                            }
                            catch (Exception ex)
                            {
                                // Player not found
                                Console.WriteLine(ex.ToString());
                                response.Status = 400;
                                return(response);
                            }
                            if (player == null)
                            {
                                response.Status = 404;
                                return(response);
                            }
                            try
                            {
                                lock (werewolf)
                                {
                                    // No game, create one
                                    if (werewolf.CurrentGameId == 0)
                                    {
                                        game = werewolf.CreateGame();
                                        werewolf.CurrentGameId = (long)game.Id;
                                    }
                                    else
                                    {
                                        // Check game seat, if full, create new
                                        game = werewolf.GetGame(werewolf.CurrentGameId.ToString());
                                        if (game.Players.Count >= WerewolfGame.MAX_PLAYERS || game.Status == Game.StatusEnum.EndedEnum)
                                        {
                                            game = werewolf.CreateGame();
                                            werewolf.CurrentGameId = (long)game.Id;
                                        }
                                    }
                                    game = werewolf.JoinGame(game, player);
                                    List <Player> players = game.Players.ToList();
                                    foreach (Player p in players)
                                    {
                                        p.Role     = null;
                                        p.Password = "";
                                        p.Session  = "";
                                        p.Game     = null;
                                    }
                                }
                                response.Status = 201;
                                response.SetBodyJson(game);
                                return(response);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.Status = 400;
                                return(response);
                            }
                        }
                    }
                    else if (request_length == 5)
                    { //game/action/{sessionID}/{actionID}/{targetID}'
                        if (requests[1].ToUpper() == "ACTION")
                        {
                            string sessionID = requests[2];
                            string actionID  = requests[3];
                            string targetID  = requests[4];
                            try
                            {
                                Action             act     = new Action();
                                Action.OutcomeEnum outcome = werewolf.PostAction(sessionID, actionID, targetID);
                                if (outcome == OutcomeEnum.RevealedEnum)
                                {
                                    Player target = werewolf.GetPlayer(targetID);
                                    act.Outcome = OutcomeEnum.RevealedEnum;
                                    act.Target  = target.Role.Name;
                                    //response.SetBodyString("{\"outcome\":\"revealed\",\"role\":\"{" + target.Role.Name + "}\"}");
                                }
                                else if (outcome == OutcomeEnum.EnchantedEnum)
                                {
                                    act.Outcome = OutcomeEnum.RevealedEnum;
                                    act.Target  = WerewolfGame.ROLE_ALPHA_WEREWOLF;
                                    //response.SetBodyString("{\"outcome\":\"revealed\",\"role\":\"{" + WerewolfGame.ROLE_ALPHA_WEREWOLF + "}\"}");
                                }
                                else if (outcome == OutcomeEnum.TargetDeadEnum)
                                {
                                    act.Outcome = OutcomeEnum.TargetDeadEnum;
                                    act.Target  = targetID;
                                }
                                else
                                {
                                    act.Outcome = outcome;
                                    response.SetBodyString("{\"outcome\":\"" + outcome + "\"}");
                                }
                                response.SetBodyJson(act);
                                response.Status = 201;
                                return(response);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.SetBodyString("{\"description\":\"" + ex.ToString() + "\"}");
                                response.Status = 400;
                                return(response);
                            }
                        }
                    }
                }
                else if (action == HTTP_DELETE)
                {
                    if (request_length == 2) //game/{id}
                    {
                        string id = requests[1];
                        Game   g;
                        try
                        {
                            g = werewolf.GetGame(id);
                            werewolf.DeleteGame(id);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                        response.Status = 200;
                        return(response);
                    }
                    else if (request_length == 3) //game/session/{sessionID}
                    {
                        if (requests[1].ToUpper() == "SESSION")
                        {
                            Game   game;
                            string sessionID = requests[2];
                            Player player;
                            try
                            {
                                player = werewolf.GetPlayerBySession(sessionID);
                            }
                            catch (Exception ex)
                            {
                                //Player not found
                                Console.WriteLine(ex.ToString());
                                response.Status = 404;
                                return(response);
                            }
                            if (player.Game == null)
                            {
                                response.Status = 404;
                                return(response);
                            }
                            try
                            {
                                lock (werewolf)
                                {
                                    game = werewolf.GetGame(player.Game.Id.ToString());
                                    game = werewolf.LeaveGame(game, player);
                                }
                                response.Status = 200;
                                response.SetBodyJson(game);
                                return(response);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.Status = 400;
                                return(response);
                            }
                        }
                    }
                }
            }
            else if (path == REQUEST_ROLE)
            {
                if (action == HTTP_GET)
                {
                    if (request_length == 1) //role/
                    {
                        List <Role> roles;
                        try
                        {
                            roles = werewolf.GetRoles().OrderBy(r => r.Id).ToList();
                        }
                        catch (Exception ex)
                        {
                            response.SetBodyString(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                        //Flatten action list
                        foreach (Role role in roles)
                        {
                            List <DNWS.Werewolf.Action> actions = new List <DNWS.Werewolf.Action>();
                            foreach (ActionRole ar in role.ActionRoles)
                            {
                                ar.Action.ActionRoles = null;
                                actions.Add(ar.Action);
                            }
                            role.Actions     = actions.OrderBy(a => a.Id).ToList();
                            role.ActionRoles = null;
                        }
                        try
                        {
                            response.Status = 200;
                            response.SetBodyJson(roles);
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                    }
                    else if (request_length == 2) //role/{id}
                    {
                        string id = requests[1];
                        Role   role;
                        try
                        {
                            role = werewolf.GetRole(id);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                        List <DNWS.Werewolf.Action> actions = new List <DNWS.Werewolf.Action>();
                        foreach (ActionRole ar in role.ActionRoles)
                        {
                            ar.Action.ActionRoles = null;
                            actions.Add(ar.Action);
                        }
                        role.Actions     = actions.OrderBy(a => a.Id).ToList();
                        role.ActionRoles = null;
                        try
                        {
                            response.Status = 200;
                            response.SetBodyJson(role);
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                    }
                }
            }
            else if (path == REQUEST_ACTION)
            {
                if (action == HTTP_GET)
                {
                    if (request_length == 1)
                    {
                        List <DNWS.Werewolf.Action> actions;
                        try
                        {
                            actions = werewolf.GetActions().OrderBy(a => a.Id).ToList();
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                        //Flatten action list
                        foreach (DNWS.Werewolf.Action act in actions)
                        {
                            List <Role> roles = new List <Role>();
                            foreach (ActionRole ar in act.ActionRoles)
                            {
                                ar.Role.ActionRoles = null;
                                roles.Add(ar.Role);
                            }
                            act.Roles       = roles.OrderBy(r => r.Id).ToList();
                            act.ActionRoles = null;
                        }
                        try
                        {
                            response.SetBodyJson(actions);
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                    }
                    else if (request_length == 2)
                    {
                        string id = requests[1];
                        DNWS.Werewolf.Action act;
                        try
                        {
                            act = werewolf.GetAction(id);
                        }
                        catch (Exception ex)
                        {
                            response.SetBodyString(ex.ToString());
                            response.Status = 500;
                            return(response);
                        }
                        List <Role> roles = new List <Role>();
                        foreach (ActionRole ar in act.ActionRoles)
                        {
                            ar.Role.ActionRoles = null;
                            roles.Add(ar.Role);
                        }
                        act.Roles       = roles.OrderBy(r => r.Id).ToList();
                        act.ActionRoles = null;
                        try
                        {
                            response.Status = 200;
                            response.SetBodyJson(act);
                            return(response);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            response.Status = 400;
                            return(response);
                        }
                    }
                    else if (request_length == 3)
                    {
                        if (requests[1].ToUpper() == "FINDBYROLE")
                        {
                            string roleid = requests[2];
                            List <DNWS.Werewolf.Action> actions;
                            try
                            {
                                actions = werewolf.GetActionByRoleId(roleid).OrderBy(a => a.Id).ToList();
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.Status = 400;
                                return(response);
                            }
                            //Flatten action list
                            foreach (DNWS.Werewolf.Action act in actions)
                            {
                                List <Role> roles = new List <Role>();
                                foreach (ActionRole ar in act.ActionRoles)
                                {
                                    ar.Action.ActionRoles = null;
                                    ar.Role.ActionRoles   = null;
                                    roles.Add(ar.Role);
                                }
                                act.Roles       = roles.OrderBy(r => r.Id).ToList();
                                act.ActionRoles = null;
                            }
                            try
                            {
                                response.SetBodyJson(actions);
                                return(response);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                response.Status = 400;
                                return(response);
                            }
                        }
                    }
                }
            }
            else if (path == REQUEST_CHAT)
            {
            }
            response.Status = 400;
            return(response);
        }