static string parseCommand(string command)
        {
            if (command.StartsWith("!player.join"))
            {
                string [] playerinfo = parseFields(command);

                foreach (Player p in gameManager.players)
                {
                    if (playerinfo[0] == p.Name)
                    {
                        return "nameTaken";
                    }
                }

                gameManager.players.Add(new Player(playerinfo[0], playerinfo[1], playerinfo[2], playerinfo[3]));
                return "Added player: " + playerinfo[0];
            }
            else if (command.StartsWith("!player.draw"))
            {
                int numCards;
                if(command.Substring(command.IndexOf('|')+1) == "max")
                {
                    numCards = gameManager.maxCards;
                }
                else
                {
                    numCards = int.Parse(command.Substring(command.IndexOf('|') + 1));
                }
                string hand = "";

                for (int i = 0; i < numCards; i++)
                {
                    hand += gameManager.whiteDeck.Pop().toHand();
                    hand += "`";
                }
                hand = hand.Substring(0, hand.Length - 1);
                return hand;
            }
            else if (command.StartsWith("!player.isCzar"))
            {
                return gameManager.players[gameManager.CzarCounter].Name;
            }
            else if (command.StartsWith("!player.leave"))
            {
                string[] playerinfo = parseFields(command);

                for (int i = 0; i < gameManager.players.Count; i++)
                {
                    if (gameManager.players[i].Name == playerinfo[0])
                    {
                        gameManager.players.RemoveAt(i);
                    }
                }

                for (int i = 0; i < gameManager.afkPlayers.Count; i++)
                {
                    if (gameManager.afkPlayers[i].Name == playerinfo[0])
                    {
                        gameManager.afkPlayers.RemoveAt(i);
                    }
                }
                return "0";
            }
            else if (command.StartsWith("!player.rejoin"))
            {
                string[] playerinfo = parseFields(command);

                for (int i = 0; i < gameManager.afkPlayers.Count; i++)
                {
                    if (gameManager.afkPlayers[i].Name == playerinfo[0])
                    {
                        gameManager.players.Add(gameManager.afkPlayers[i]);
                        gameManager.afkPlayers.RemoveAt(i);
                    }
                }
                return "0";
            }
            else if (command.StartsWith("!player.playCard"))
            {
                int entries =  gameManager.numFields(gameManager.currentBlackCard.text);

                string[] playerinfo = parseFields(command);

                if (entries == 1)
                {
                    gameManager.currentPlayerCards.Add(new PlayInfo(playerinfo[0], playerinfo[1]));
                }
                else
                {
                    string temp = "";

                    for (int i = 0; i < entries; i++)
                    {
                        temp += playerinfo[i] + "`";
                    }

                    temp = temp.Substring(0, temp.Length - 1);

                    gameManager.currentPlayerCards.Add(new PlayInfo(temp, playerinfo[playerinfo.Length - 1]));
                }

                for (int i = 0; i < gameManager.waitingFor.Count; i++ )
                {
                    if (gameManager.waitingFor[i].Name == playerinfo[1])
                    {
                        gameManager.waitingFor.RemoveAt(i);
                    }
                }

                return "0";
            }
            else if (command.StartsWith("!game.blackcard"))
            {
                if (!AIstarted)
                {
                    Thread AiLoop = new Thread(AIloop);
                    AiLoop.Start();
                    AIstarted = true;
                }
                return gameManager.currentBlackCard.text;
            }
            else if (command.StartsWith("!player.hasWon"))
            {
                foreach (Player p in gameManager.players)
                {
                    if (p.hasWon())
                    {
                        return p.Name;
                    }
                }
                foreach (AI ai in gameManager.AIs)
                {
                    if (ai.hasWon())
                    {
                        return ai.Name;
                    }
                }

                return "no";
            }
            else if (command.StartsWith("!game.start"))
            {
                gameManager.gameStarted = true;

                gameManager.players = gameManager.players.OrderBy(o => o.TimeSinceDump()).ToList();
                gameManager.players[gameManager.CzarCounter].IsCzar = true;

                return gameManager.players[0].Name + " is the Card Czar";

            }
            else if (command.StartsWith("!game.hasStarted"))
            {
                return gameManager.gameStarted.ToString();
            }
            else if (command.StartsWith("!game.roundPlayed"))
            {
                return gameManager.played().ToString();
            }
            else if (command.StartsWith("!game.roundWinner"))
            {
                return gameManager.roundWinner;
            }
            else if (command.StartsWith("!game.newRound"))
            {
                gameManager.NewRound();
                return "0";
            }
            else if (command.StartsWith("!game.setNextCzar"))
            {
                gameManager.incrementCzarCounter();
                return "0";
            }
            else if (command.StartsWith("!game.numPlayers"))
            {
                return (gameManager.numAIs + gameManager.players.Count).ToString();
            }
            else if (command.StartsWith("!game.addAI"))
            {
                Random rand = new Random();

                AI newAi = new AI();

                int nameIndex = rand.Next(0,AInames.Count-1);
                if (AInames.Count > 0)
                {
                    newAi.Name = AInames[nameIndex];
                    AInames.RemoveAt(nameIndex);
                }
                else
                {
                    newAi.Name = "AI-" + rand.Next(0, int.MaxValue);
                }
                newAi.IpAddress = ipaddr.ToString();
                for (int i = 0; i < gameManager.maxCards; i++)
                {
                    newAi.hand.Add(gameManager.whiteDeck.Pop().toHand());
                }

                gameManager.numAIs++;
                gameManager.AIs.Add(newAi);

                return "Added AI:" + newAi.Name;

            }
            else if (command.StartsWith("!game.setWinCards|"))
            {
                command = command.Substring(command.IndexOf('|') + 1);

                gameManager.winCards = command;

                return "0";
            }
            else if (command.StartsWith("!game.getWinCards|"))
            {
                return gameManager.winCards;
            }
            else if (command.StartsWith("!game.roundEntries"))
            {
                string temp = "";

                Shuffler shuffler = new Shuffler();
                shuffler.Shuffle(gameManager.currentPlayerCards);

                foreach (PlayInfo p in gameManager.currentPlayerCards)
                {
                    temp += p.card + "`";
                }

                if (temp == "")
                {
                    return "0";
                }

                temp = temp.Substring(0, temp.Length - 1);

                return temp;
            }
            else if (command.StartsWith("!game.setWinner"))
            {
                command = command.Substring(command.IndexOf('|') + 1);
                gameManager.roundWinner = gameManager.currentPlayerCards[int.Parse(command)].cardPlayer;
                foreach (Player p in gameManager.players)
                {
                    if (p.Name == gameManager.roundWinner)
                    {
                        p.Points++;
                    }
                }
                foreach (AI ai in gameManager.AIs)
                {
                    if (ai.Name == gameManager.roundWinner)
                    {
                        ai.Points++;
                    }
                }
                return "0";
            }
            else if (command.StartsWith("!game.numPlayers"))
            {
                return (gameManager.AIs.Count + gameManager.players.Count).ToString();
            }
            else if (command.StartsWith("!game.viewPoints"))
            {
                string tally = "";

                foreach (Player p in gameManager.players)
                {
                    tally += p.Name + "\t\t" + p.Points + "\n";
                }
                foreach (AI ai in gameManager.AIs)
                {
                    tally += ai.Name + "\t\t" + ai.Points + "\n";
                }
                return tally;
            }
            else if (command.StartsWith("!game.playerTimeout"))
            {
                foreach(Player p in gameManager.waitingFor)
                {
                    gameManager.afkPlayers.Add(p);
                    gameManager.players.Remove(p);
                }

                return "0";
            }
            else if (command.StartsWith("!game.quit"))
            {
                Environment.Exit(0);
                return "0";
            }
            else if (command.StartsWith("!help"))
            {
                return "|command| \t\t |function| \n" +
                       "!game.start \t\t starts the game (do so only after all players have joined) \n" +
                       "!game.addAI \t\t adds a rando cardrisian (a player bot that picks cards randomly) \n" +
                       "!game.quit \t\t ends the game (not gracefully for clients midgame) \n";
            }
            else if (command.StartsWith("!chat.sendMessage"))
            {
                foreach (Player p in gameManager.players)
                {
                    p.messages.Push(command.Substring(command.IndexOf('|') + 1));
                }

                return "0";
            }
            else if (command.StartsWith("!chat.getMessages"))
            {
                string name = command.Substring(command.IndexOf('|') + 1);
                string messages = "";
                foreach (Player p in gameManager.players)
                {
                    if (name == p.Name)
                    {
                        while(p.messages.Count != 0)
                        {
                            messages += p.messages.Pop() + "|";
                        }
                    }
                }
                if (messages != "")
                {
                    messages = messages.Substring(0, messages.LastIndexOf('|'));
                    return messages;
                }
                else
                {
                    return "0";
                }

            }
            else if (command == "\n")
            {
                return "0";
            }
            else
            {
                return "Unknown Command";
            }
        }
        static string parseCommand(string command)
        {
            if (command.StartsWith("!player.join"))
            {
                string [] playerinfo = parseFields(command);
                gameManager.players.Add(new Player(playerinfo[0], playerinfo[1], playerinfo[2], playerinfo[3]));
                return "Added player: " + playerinfo[0];
            }
            else if (command.StartsWith("!player.draw"))
            {
                int numCards;
                if(command.Substring(command.IndexOf('|')+1) == "max")
                {
                    numCards = gameManager.maxCards;
                }
                else
                {
                    numCards = int.Parse(command.Substring(command.IndexOf('|') + 1));
                }
                string hand = "";

                for (int i = 0; i < numCards; i++)
                {
                    hand += gameManager.whiteDeck.pop().toHand();
                    hand += "-";
                }
                return hand;
            }
            else if (command.StartsWith("!player.isCzar"))
            {
                return gameManager.players[gameManager.CzarCounter].IpAddress.ToString();
            }
            else if (command.StartsWith("!player.playCard"))
            {
                string[] playerinfo = parseFields(command);

                gameManager.currentPlayerCards.Add(new PlayInfo(playerinfo[0],playerinfo[1]));

                return "";
            }
            else if (command.StartsWith("!game.blackcard"))
            {
                return gameManager.currentBlackCard.text;
            }
            else if (command.StartsWith("!player.hasWon"))
            {
                bool temp;

                foreach (Player p in gameManager.players)
                {
                    temp = p.hasWon();
                    if (temp)
                    {
                        return p.Name;
                    }
                }

                return "no";
            }
            else if (command.StartsWith("!game.start"))
            {
                gameManager.gameStarted = true;

                gameManager.players = gameManager.players.OrderBy(o => o.TimeSinceDump()).ToList();
                gameManager.players[0].IsCzar = true;

                return gameManager.players[0].Name + " is the Card Czar";

            }
            else if (command.StartsWith("!game.hasStarted"))
            {
                return gameManager.gameStarted.ToString();
            }
            else if (command.StartsWith("!game.roundPlayed"))
            {
                return gameManager.played().ToString();
            }
            else if (command.StartsWith("!game.roundWinner"))
            {
                return gameManager.roundWinner;
            }
            else if (command.StartsWith("!game.newRound"))
            {
                gameManager.NewRound();
                return "0";
            }
            else if (command.StartsWith("!game.addAI"))
            {
                Random rand = new Random();

                AI newAi = new AI();
                newAi.Name = "AI" + rand.Next(0,1000).ToString();
                newAi.IpAddress = ipaddr.ToString();
                for (int i = 0; i < gameManager.maxCards; i++)
                {
                    newAi.hand.Add(gameManager.whiteDeck.pop().toHand());
                }

                gameManager.numAIs++;
                gameManager.players.Add(newAi);

                return "Added AI:" + newAi.Name;

            }
            else if (command.StartsWith("!game.roundEntries"))
            {
                string temp = "";
                foreach (PlayInfo p in gameManager.currentPlayerCards)
                {
                    temp += p.card + "-";
                }

                temp = temp.Substring(0, temp.Length - 1);

                return temp;
            }
            else if (command.StartsWith("!game.setWinner"))
            {
                command = command.Substring(command.IndexOf('|') + 1);
                gameManager.roundWinner = gameManager.currentPlayerCards[int.Parse(command)].cardPlayer;
                foreach (Player p in gameManager.players)
                {
                    if (p.Name == gameManager.roundWinner)
                    {
                        p.Points++;
                    }
                }
                return "";
            }
            else if (command == "\n")
            {
                return "";
            }
            else
            {
                return "Unknown Command";
            }
        }