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(); } }
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); }
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; } }