/// <summary> /// Executa o jogo se comunicando com o par remoto /// </summary> private void Jogar() { StreamWriter writer = new StreamWriter(cliente.GetStream()); writer.AutoFlush = true; TirosDados = new ListaDeTiros(); TirosRecebidos = new ListaDeTiros(); StreamReader reader = new StreamReader(cliente.GetStream()); try { while (Conectado) { // Envia um tiro Tiro tiroDado = EsperarTiro(); writer.writeLine("Tiro " + tiroDado.X + "," + tiroDado.Y); // Recebe um tiro do cliente remoto string r; string line; line = reader.ReadLine(); int x = Convert.ToInt32(line.Substring(5, line.IndexOf(',') - 5)); int y = Convert.ToInt32(line.Substring(line.IndexOf(',') + 1)); Tiro recebido = new Tiro(x, y); // Avisa que recebeu o tiro para o cliente local TirosRecebidos.Add(recebido, recebido.Aplicar(Tabuleiro)); OnTiroRecebido(recebido); // Envia o resultado do tiro recebido writer.WriteLine(((uint)recebido.Aplicar(Tabuleiro)).ToString()); // Recebe o resultado do seu tiro line = reader.ReadLine(); // Avisa o cliente do resultado do tiro ResultadoDeTiro resultado = ResultadoDeTiro.Errou; resultado = (ResultadoDeTiro)Convert.ToUInt32(line); TirosDados.Add(tiroDado, resultado); OnResultadoDeTiro(tiroDado, resultado); waitHandle.Reset(); } } catch (Exception e) { Debugger.Log(0, "error", e.Message + Environment.NewLine); OnClienteDesconectado((cliente.Client.RemoteEndPoint as IPEndPoint).Address); } }
/// <summary> /// Construtor /// </summary> /// <param name="nome">Nome do jogador, passado para os clientes remotos</param> /// <param name="tabuleiro">Tabuleiro com o qual se quer jogar</param> /// <exception cref="Exception">Se o tabuleiro estiver incompleto</exception> public ClienteP2P(string nome, Tabuleiro tabuleiro) : this(nome) { if (!tabuleiro.EstaCompleto()) { throw new Exception("Tabuleiro incompleto"); } rnd = new Random(); waitHandle = new AutoResetEvent(false); TirosDados = new ListaDeTiros(); TirosRecebidos = new ListaDeTiros(); Tabuleiro = tabuleiro; OnClienteConectado += Dados_OnClienteConectado; OnClienteDesconectado += Dados_OnClienteDesconectado; }