コード例 #1
0
        private void BtnStart()
        {
            if (isConnected)
            {
                string number = getTextboxNumberValue();
                if (number.Length < HiddenNumber.LENGTH || findRepeats(number))
                {
                    showPopup("Please enter 4 different numbers!", 2500);
                    return;
                }

                answerNumber = new HiddenNumber(number);

                if (MenuItem_YourNumber.Items.Count > 0)
                {
                    (MenuItem_YourNumber.Items[0] as MenuItem).Header = number;
                    MenuItem_YourNumber.Visibility = Visibility.Visible;
                }

                NetworkStream networkStream = tcpClientOpponent.GetStream();
                if (!playingOnServer)
                {
                    //  одновременный старт
                    networkStream.Write(new byte[] { readyPacket }, 0, 1);
                }
                else
                {
                    byte[] data = Encoding.Unicode.GetBytes(number);
                    networkStream.Write(data, 0, data.Length);
                }

                if (opponentIsReady)
                {
                    StartGame();
                    if (TURN_MODE)
                    {
                        opponentTurn();
                    }
                }
                else
                {
                    WaitWindow waitWindow = new WaitWindow()
                    {
                        Owner = this,
                        Title = "Please wait your opponent", Message = "Please wait your opponent"
                    };
                    waitWindow.ShowDialog();
                }
            }
            else
            {
                SingleGameStart();
            }
        }
コード例 #2
0
        private void generateNumber()
        {
            Random random = new Random();
            char   randomed;
            string generatedNum = "";

            for (int i = 0; i < HiddenNumber.LENGTH; i++)
            {
                randomed = random.Next(0, 9).ToString()[0];
                if (i > 0 && generatedNum.Contains(randomed))
                {
                    i--;
                }
                else
                {
                    generatedNum += randomed;
                }
            }
            answerNumber = new HiddenNumber(generatedNum);
        }
コード例 #3
0
        public void Process()
        {
            NetworkStream stream = null;

            try
            {
                bool firstReadySent = false;
                stream = client.GetStream();
                byte[] data = new byte[256];                 // буфер для получаемых данных
                while (client.Connected)
                {
                    // если соперника нет, то ждем его появления
                    while (opponent == null)
                    {
                        Thread.Sleep(300);
                        continue;
                    }

                    // при появлении cоперника отправляем на клиент пакет готовности
                    if (!firstReadySent)
                    {
                        SendReadyPacket(stream);                         // клиент закрывает окно ожидания и загадывает число
                        firstReadySent = true;
                    }

                    // получаем сообщение
                    // первое сообщение должно быть загаданное число
                    StringBuilder builder = new StringBuilder();
                    int           bytes   = 0;
                    do
                    {
                        bytes = stream.Read(data, 0, data.Length);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }while (stream.DataAvailable);
                    Console.WriteLine($"> Received from {HostName} : {builder.ToString()}");

                    if (number == null)
                    {
                        // клиент присылает свое загаданное число
                        number  = new HiddenNumber(builder.ToString());
                        isReady = true;

                        if (opponent.isReady)
                        {
                            SendReadyPacket(stream);
                            SendReadyPacket(opponent.client.GetStream());
                        }

                        continue;
                    }

                    // если соперник не готов, то ждем
                    if (!opponent.isReady)
                    {
                        continue;
                    }

                    // отправить попытку сопернику
                    TcpClient opponentTcpClient = opponent.client;
                    data = Encoding.Unicode.GetBytes(builder.ToString());
                    opponentTcpClient.GetStream().Write(data, 0, data.Length);
                    Console.WriteLine($"> Sent data to opponent {opponent.HostName} : {builder.ToString()}");

                    // проверка совпадений
                    opponent.number.CheckMatches(builder.ToString());

                    // отправка ответа
                    data = new byte[] { (byte)opponent.number.Bulls, (byte)opponent.number.Cows };
                    stream.Write(data, 0, data.Length);
                    stream.Write(data, 0, data.Length);                     // test kostyl' todo fix
                    Console.WriteLine($"> Answer to {HostName} : bulls {data[0]} , cows {data[1]}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"\n========= EXCEPTION ON {HostName} ==========");
                Console.WriteLine(ex);
                Console.WriteLine();
            }
            finally
            {
                stream?.Close();
                client?.Close();
                ClientDisconnected(this);
                opponent.client.Close();
                opponent = null;
            }
        }