public gameState(int _recipient, int stage = 1)
 {
     if (stage == 0)
     {
         _serverPort            = MainWindow.serverPort;
         _numOfPlayers          = MainWindow.numOfPlayers;
         _myPlayerNum           = _recipient;
         _numOfPlayersConnected = MainWindow.numOfPlayersConnected;
         _playerNames           = MainWindow.playerNames;
         _beginGame             = MainWindow.beginGame;
         //_messageNumber = MainWindow.messageNum[_recipient];
     }
     else
     {
         _AllHands             = MainWindow.AllHands;
         _AllTableMoney        = MainWindow.AllTableMoney;
         _AllTableProperties   = MainWindow.AllTableProperties;
         _button1Text          = MainWindow.playerTurns[_recipient].button1.Content.ToString();
         _button1Visibility    = MainWindow.playerTurns[_recipient].button1.Visibility;
         _button2Text          = MainWindow.playerTurns[_recipient].button2.Content.ToString();
         _button2Visibility    = MainWindow.playerTurns[_recipient].button2.Visibility;
         _button3Text          = MainWindow.playerTurns[_recipient].button3.Content.ToString();
         _button3Visibility    = MainWindow.playerTurns[_recipient].button3.Visibility;
         _buttonBackText       = MainWindow.playerTurns[_recipient].buttonBack.Content.ToString();
         _buttonBackVisibility = MainWindow.playerTurns[_recipient].buttonBack.Visibility;
         _individualPrompt     = MainWindow.playerTurns[_recipient].Prompt.Content.ToString();
         _newUniversalPrompt   = MainWindow.newUniversalPrompt;
         _numCardsInDeck       = MainWindow.deckShuffled.Count;
         _playerNames          = MainWindow.playerNames;
         _playerNum            = MainWindow.playerNum;
         _playNum       = MainWindow.playNum;
         _updateCards   = MainWindow.updateCards;
         _messageNumber = MainWindow.messageNum[_recipient];
         _stage         = MainWindow.stage.ToString();
         _turnStage     = MainWindow.stage;
     }
 }
 public gameState(int _recipient,int stage = 1)
 {
     if (stage == 0)
     {
         _serverPort = MainWindow.serverPort;
         _numOfPlayers = MainWindow.numOfPlayers;
         _myPlayerNum = _recipient;
         _numOfPlayersConnected = MainWindow.numOfPlayersConnected;
         _playerNames = MainWindow.playerNames;
         _beginGame = MainWindow.beginGame;
         //_messageNumber = MainWindow.messageNum[_recipient];
     }
     else
     {
         _AllHands = MainWindow.AllHands;
         _AllTableMoney = MainWindow.AllTableMoney;
         _AllTableProperties = MainWindow.AllTableProperties;
         _button1Text = MainWindow.playerTurns[_recipient].button1.Content.ToString();
         _button1Visibility = MainWindow.playerTurns[_recipient].button1.Visibility;
         _button2Text = MainWindow.playerTurns[_recipient].button2.Content.ToString();
         _button2Visibility = MainWindow.playerTurns[_recipient].button2.Visibility;
         _button3Text = MainWindow.playerTurns[_recipient].button3.Content.ToString();
         _button3Visibility = MainWindow.playerTurns[_recipient].button3.Visibility;
         _buttonBackText = MainWindow.playerTurns[_recipient].buttonBack.Content.ToString();
         _buttonBackVisibility = MainWindow.playerTurns[_recipient].buttonBack.Visibility;
         _individualPrompt = MainWindow.playerTurns[_recipient].Prompt.Content.ToString();
         _newUniversalPrompt = MainWindow.newUniversalPrompt;
         _numCardsInDeck = MainWindow.deckShuffled.Count;
         _playerNames = MainWindow.playerNames;
         _playerNum = MainWindow.playerNum;
         _playNum = MainWindow.playNum;
         _updateCards = MainWindow.updateCards;
         _messageNumber = MainWindow.messageNum[_recipient];
         _stage = MainWindow.stage.ToString();
         _turnStage = MainWindow.stage;
     }
 }
        public void timerDing()
        {
            if (clientState == state.connectToServer)
            {
                client = new ClientSocket(serverPort, 2, clientPort, clientIP, serverIP);
                clientState = state.getNewPort;
            }

            if (clientState == state.getNewPort)
            {
                byte[] storage = null;
                storage = client.pollAndReceiveData(client.Server, 2);
                if (storage.Count() > 2)
                {
                    //sendAcknowledgement();
                    string tempString = GetString(storage);
                    currGameState = Newtonsoft.Json.JsonConvert.DeserializeObject<gameState>(tempString);
                    serverPort = currGameState._serverPort;
                    myPlayerNum = currGameState._myPlayerNum;
                    numOfPlayers = currGameState._numOfPlayers;
                    numOfPlayersConnected = currGameState._numOfPlayersConnected;
                    playerNames = currGameState._playerNames;
                    beginGame = currGameState._beginGame;
                    initializeDisplay();
                    client.stop();
                    Thread.Sleep(100);
                    client = new ClientSocket(serverPort, 2, clientPort, clientIP, serverIP);
                    storage = GetBytes(myName);
                    client.sendData(storage);
                    if (beginGame)
                    {
                        clientState = state.beginGame;
                    }
                    else
                    {
                        clientState = state.waitForOthers;
                    }
                }
            }
            if (clientState == state.waitForOthers)
            {
                myDisplay.Prompt.Content = "Waiting on " + (numOfPlayers - numOfPlayersConnected) + " more players...";
                byte[] storage = null;
                storage = client.pollAndReceiveData(client.Server, 2);
                if (storage.Count() > 2)
                {
                    //sendAcknowledgement();
                    string tempString = GetString(storage);
                    currGameState = Newtonsoft.Json.JsonConvert.DeserializeObject<gameState>(tempString);
                    numOfPlayersConnected = currGameState._numOfPlayersConnected;
                    playerNames = currGameState._playerNames;
                    beginGame = currGameState._beginGame;
                }
                if (beginGame)
                {
                    clientState = state.beginGame;
                }
            }
            if (clientState == state.beginGame)
            {
                byte[] storage = null;
                storage = client.pollAndReceiveData(client.Server, 2);
                if (storage.Count() > 2)
                {
                    //sendAcknowledgement();
                    string tempString = GetString(storage);
                    currGameState = Newtonsoft.Json.JsonConvert.DeserializeObject<gameState>(tempString);
                    AllHands = currGameState._AllHands;
                    AllTableMoney = currGameState._AllTableMoney;
                    AllTableProperties = currGameState._AllTableProperties;
                    myDisplay.button1.Content = currGameState._button1Text;
                    myDisplay.button1.Visibility = currGameState._button1Visibility;
                    myDisplay.button2.Content = currGameState._button2Text;
                    myDisplay.button2.Visibility = currGameState._button2Visibility;
                    myDisplay.button3.Content = currGameState._button3Text;
                    myDisplay.button3.Visibility = currGameState._button3Visibility;
                    myDisplay.buttonBack.Content = currGameState._buttonBackText;
                    myDisplay.buttonBack.Visibility = currGameState._buttonBackVisibility;
                    myDisplay.Prompt.Content = currGameState._individualPrompt;
                    myDisplay.universalPrompt.Text += currGameState._newUniversalPrompt;
                    numCardsInDeck = currGameState._numCardsInDeck;
                    playNum = currGameState._playNum;
                    playerNum = currGameState._playerNum;
                    playerNames = currGameState._playerNames;
                    showFullDisplay();
                    clientState = state.transmit;
                }
            }
            if (clientState == state.transmit)
            {
                byte[] storage = null;
                storage = client.pollAndReceiveData(client.Server, 2);
                if (storage.Count() > 2)
                {
                    //sendAcknowledgement();
                    string tempString = GetString(storage);
                    currGameState = Newtonsoft.Json.JsonConvert.DeserializeObject<gameState>(tempString);
                    if (currGameState._messageNumber > messageNum)
                    {
                        messageNum = currGameState._messageNumber;
                        eventHappened = false;
                        clearEvents();
                        AllHands = currGameState._AllHands;
                        AllTableMoney = currGameState._AllTableMoney;
                        AllTableProperties = currGameState._AllTableProperties;
                        myDisplay.button1.Content = currGameState._button1Text;
                        myDisplay.button1.Visibility = currGameState._button1Visibility;
                        myDisplay.button2.Content = currGameState._button2Text;
                        myDisplay.button2.Visibility = currGameState._button2Visibility;
                        myDisplay.button3.Content = currGameState._button3Text;
                        myDisplay.button3.Visibility = currGameState._button3Visibility;
                        myDisplay.buttonBack.Content = currGameState._buttonBackText;
                        myDisplay.buttonBack.Visibility = currGameState._buttonBackVisibility;
                        myDisplay.Prompt.Content = currGameState._individualPrompt;
                        myDisplay.universalPrompt.Text = currGameState._newUniversalPrompt;
                        numCardsInDeck = currGameState._numCardsInDeck;
                        playNum = currGameState._playNum;
                        playerNum = currGameState._playerNum;
                        playerNames = currGameState._playerNames;
                        string bob = currGameState._stage;
                        stage = currGameState._turnStage;
                        //Other player needs to choose cards
                        if ((stage == turnStage.acknowledgeAttack1) || (stage == turnStage.acknowledgeAttack2))
                        {
                            if (playerNum == myPlayerNum)
                            {
                                allowEvents = false;
                            }
                            else
                            {
                                allowEvents = true;
                            }
                        }
                        else //Playernum needs to choose cards
                        {
                            if (playerNum == myPlayerNum)
                            {
                                allowEvents = true;
                            }
                            else
                            {
                                allowEvents = false;
                            }
                        }
                        showTable(currGameState._updateCards);
                    }
                    else if(eventHappened)
                    {
                        TimeSpan duration = DateTime.Now - lastSend;
                        if (duration.Milliseconds > 5000)
                        {
                            resendClientEvent();
                            lastSend = DateTime.Now;
                        }
                    }
                }
            }
            aTimer.Enabled = true;
        }