/// <summary> /// Envia a mensagem XML passada como parâmetro para o servidor atual e retorna a resposta do servidor. /// Este método cria uma nova thread para o envio da mensagem e aguarda a resposta em uma variável compartilhada. /// A mensagem é enviada utilizando-se o protocolo UDP. /// </summary> /// <param name="mensagem">mensagem XML de requisição que será enviado ao servidor.</param> private void lerTabuleiro() { String mensagem = formPai.enviandoMensagem("<REQUEST><RT>game board</RT><GID>" + jogo + "</GID></REQUEST>"); Regex exp = new Regex(@"<GAME CURRENT BOARD>(.+)</GAME CURRENT BOARD>", RegexOptions.IgnoreCase); Regex exp2 = new Regex(@"<(.)>", RegexOptions.IgnoreCase); RespostaDoServidor resp1 = new RespostaDoServidor(mensagem); //int[] tabuleiro = new int[9]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { int id = i * 3 + j; int valor = 0; if (resp1.tabuleiro[i, j] == "-") { valor = -1; tabLabel[id].Text = "O"; } else if (resp1.tabuleiro[i, j] == "+") { valor = +1; tabLabel[id].Text = "X"; } tabuleiro[id] = valor; } } String resposta = formPai.enviandoMensagem(MensagensDeRequisicao.estadoDoJogo(jogo, jogador)); RespostaDoServidor resp = new RespostaDoServidor(resposta); if (!resp.jogoEncerrado) { if (resp.turnoDoJogadorAtual) { lblStatus.Text = "seu turno"; if (botAtivado && !botJogou) { jogarAutomaticamente(); } timer1.Enabled = true; } else if (resp.turnoDoAdversario) { if (jogadorAtual != tiposDeJogadores.Observador) { lblStatus.Text = "turno do adversário"; } timer1.Enabled = true; } botJogou = false; } }
/// <summary> /// Método acionado pelo Tick do Timer timer1. /// Envia mensagem ao servidor para verificar se há mudanças no jogo e /// atualiza o formulário com os dados da resposta do servidor. /// </summary> private void timer1_Tick(object sender, EventArgs e) { String resposta = formPai.enviandoMensagem(MensagensDeRequisicao.estadoDoJogo(jogo, jogador)); RespostaDoServidor resp1 = new RespostaDoServidor(resposta); if (resp1.jogoEncerrado) { verificarStatus(resp1); } else if (resp1.turnoDoJogadorAtual) { lblStatus.Text = "seu turno"; if (botAtivado) { jogarAutomaticamente(); } else { timer1.Enabled = false; } lerTabuleiro(); verificarStatus(resp1); } }