// метд обровки команд сервера private async void Listen() { try { bool isExit = false; while (!isExit) { // очікуємо та приймаємо команду від сервера ServerCommand command = await ReceiveCommand(); // обробляємо команду switch (command.Type) { // команда очікування опонента case CommandType.WAIT: // візуально повідомляємо про очікування opponentNameTxtBox.Content = "Waiting..."; break; // команда початку гри case CommandType.START: // встановлюємо параметри гри IsX = command.IsX; IsMoving = IsX; symbolLabel.Content = Symbol; OpponentNickname = command.OpponentName; opponentNameTxtBox.Content = OpponentNickname; break; // команда ходу опонента case CommandType.MOVE: // знаходимо клітинку, де був виконаний хід foreach (Border item in fieldGrid.Children.OfType <Border>()) { // звіряємо координати if (item.Tag.Equals(command.MoveCoord)) { // встановлюємо символ опонента ((TextBlock)item.Child).Text = OpponentSymbol.ToString(); } // дозволяємо хід IsMoving = true; } break; case CommandType.RESTART: // знаходимо клітинку, де був виконаний хід MessageBox.Show($"{command.OpponentName} Won"); foreach (Border item in fieldGrid.Children.OfType <Border>()) { // встановлюємо символ опонента ((TextBlock)item.Child).Text = ""; } break; case CommandType.DRAW: // знаходимо клітинку, де був виконаний хід MessageBox.Show($"Draw"); foreach (Border item in fieldGrid.Children.OfType <Border>()) { // встановлюємо символ опонента ((TextBlock)item.Child).Text = ""; } break; // команда завершення гри case CommandType.CLOSE: // завершуємо гру CloseSession(); // встановлюємл змінну для закриття цикла обробки подій від сервера isExit = true; break; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private async void Listen() { try { bool isExit = false; while (!isExit) { ServerCommand command = await ReceiveCommand(); switch (command.Type) { case CommandType.WAIT: statusTB.Text = "Waiting..."; break; case CommandType.START: IsX = command.IsX; IsMoving = IsX; statusTB.Text = IsMoving ? "Your turn" : "Opponent's turn"; symbolTB.Text = Symbol.ToString(); OpponentNickname = command.OpponentName; opponentTB.Text = OpponentNickname; break; case CommandType.DRAW: IsPlaying = false; statusTB.Text = "Game end."; MessageBox.Show("It look like it's a draw.", $"Game Result for {Nickname}"); break; case CommandType.LOSE: IsPlaying = false; statusTB.Text = "Game end."; IsMoving = false; MessageBox.Show("You lose.", $"Game Result for {Nickname}"); break; case CommandType.MOVE: statusTB.Text = "Your turn"; foreach (Border item in fieldGrid.Children.OfType <Border>()) { if (item.Tag.Equals(command.MoveCoord)) { ((TextBlock)item.Child).Text = OpponentSymbol.ToString(); item.IsEnabled = false; } IsMoving = true; } break; case CommandType.CLOSE: if (IsPlaying) { MessageBox.Show($"{OpponentNickname} left the game."); } CloseSession(); isExit = true; break; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private async void Listen() { try { bool isExit = false; while (!isExit) { ServerCommand command = await ReceiveCommand(); switch (command.Type) { case CommandType.WAIT: opponentNameTxtBox.Content = "Waiting..."; break; case CommandType.START: IsX = command.IsX; IsMoving = IsX; symbolLabel.Content = Symbol; OpponentNickname = command.OpponentName; opponentNameTxtBox.Content = OpponentNickname; break; case CommandType.MOVE: foreach (Border item in fieldGrid.Children.OfType <Border>()) { if (item.Tag.Equals(command.MoveCoord)) { ((TextBlock)item.Child).Text = OpponentSymbol.ToString(); string str = ((Border)item).Tag.ToString(); char[] wordsSplit = new char[] { ':', }; string[] coords = str.Split(wordsSplit, StringSplitOptions.RemoveEmptyEntries); arr[int.Parse(coords[0]), int.Parse(coords[1])] = OpponentSymbol; if (IsWin(OpponentSymbol)) { MessageBox.Show(OpponentNickname + " Win!"); HelpArr(); if (IsPlaying) { await SendCommand(new ClientCommand(CommandType.EXIT, Nickname)); } } else if (IsEndGame()) { MessageBox.Show("End game"); HelpArr(); if (IsPlaying) { await SendCommand(new ClientCommand(CommandType.EXIT, Nickname)); } } } IsMoving = true; } break; case CommandType.CLOSE: CloseSession(); isExit = true; break; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }