Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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;
        }