private void MenuItemFind_Click(object sender, RoutedEventArgs e) { try { StopGameOnline(); tcpClientOpponent = new TcpClient(); tcpClientOpponent.Connect(GameIPConfig.ServerIPAddress, GameIPConfig.Port); byte[] data = new byte[256]; NetworkStream stream = tcpClientOpponent.GetStream(); int bytes; MenuItemsToggle(false); // open waitwindow to wait opponent WaitWindow waitWindow = new WaitWindow() { Owner = this, Message = "Searching for an opponent" }; bool cancelation = true; Task.Run(() => { try { do { bytes = stream.Read(data, 0, data.Length); if (bytes == 1 && data[0] == readyPacket) { this.Dispatcher.Invoke(() => { cancelation = false; waitWindow.Close(); playingOnServer = true; connectionSuccessful(); }); } } while (stream.DataAvailable); } catch (Exception ex) { } }); waitWindow.Closing += (sendr, ev) => { if (cancelation) { tcpClientOpponent.Close(); MenuItemsToggle(true); } }; waitWindow.ShowDialog(); } catch (Exception ex) { MessageBox.Show(this, ex.ToString()); } }
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(); } }
void waitForConnect() { try { TcpListener server = new TcpListener(IPAddress.Any, GameIPConfig.Port); server.Start(); WaitWindow waitWindow = new WaitWindow() { Owner = this, Message = "Waiting for connection on port " + GameIPConfig.Port }; Thread task = new Thread(() => { while (tcpClientOpponent == null) { // Console.WriteLine("Ожидание подключений... "); try { tcpClientOpponent = server.AcceptTcpClient(); } catch (Exception ex) { break; } // Console.WriteLine("Подключен клиент. Выполнение запроса..."); this.Dispatcher.Invoke(() => { waitWindow.Close(); connectionSuccessful(); }); } }); task.Start(); waitWindow.Closing += (sender, e) => { server.Stop(); }; waitWindow.ShowDialog(); } catch (Exception ex) { MessageBox.Show(this, ex.ToString()); } }