Exemplo n.º 1
0
        // Clients' request parsing method
        public void ReceiveRequests(TcpClient client)
        {
            NetworkStream dataStream;
            int           requestSize;
            string        clientAddress = (client.Client.RemoteEndPoint).ToString();
            string        request;
            string        response;

            byte[]  requestBuffer;
            byte[]  responseBuffer;
            Jugador jugador = new Jugador();

            jugador.Client = client;

            try
            {
                while (true)
                {
                    // Parse client's received data
                    dataStream = client.GetStream();

                    requestBuffer = new byte[2048];
                    requestSize   = dataStream.Read(requestBuffer, 0, requestBuffer.Length);

                    request = Encoding.ASCII.GetString(requestBuffer, 0, requestSize);

                    Console.WriteLine("Receiving client's data...");
                    Console.WriteLine(String.Format("Received data: {0}", request));

                    // Encode and send server's response
                    response = string.Empty;

                    var deserializedRequest = JsonConvert.DeserializeObject <dynamic>(request);

                    // TODO: Definir mas metodos del servidor
                    switch ((string)deserializedRequest.method)
                    {
                    case "login":
                    {
                        try
                        {
                            String user = (string)deserializedRequest.user;
                            AD.authentication(user, (string)deserializedRequest.password);
                            response = "{\"success\":true}";

                            if (controller.Jugadores.Count == 4)
                            {
                                foreach (Jugador jugador2 in controller.Jugadores)
                                {
                                    if (user == jugador2.Nombre)
                                    {
                                        jugador2.EnLinea = true;
                                        jugador2.Client  = client;
                                        response         = "{\"success\":true}";
                                        break;
                                    }
                                    else
                                    {
                                        response = "{\"success\":false}";
                                    }
                                }
                            }
                            else
                            {
                                jugador.Nombre  = (string)deserializedRequest.user;
                                jugador.EnLinea = true;
                                controller.Jugadores.Add(jugador);
                            }

                            if (controller.Jugadores.Count == 4 && controller.PartidaIniciada != true)
                            {
                                controller.Inicio();
                            }
                        }
                        catch (Exception e)
                        {
                            response = "{\"success\":false}";
                            Console.WriteLine(e.Message.ToString());
                        }

                        responseBuffer = Encoding.ASCII.GetBytes(response);
                        dataStream.Write(responseBuffer, 0, responseBuffer.Length);
                        Console.WriteLine(response);
                        dataStream.Flush();
                        SendGameInformation();
                        break;
                    }

                    case "raise":
                    {
                        int apuesta = deserializedRequest.quantity;
                        controller.Raise(jugador.Nombre, apuesta);
                        SendGameInformation();
                    }
                    break;

                    case "create":
                    {
                        try
                        {
                            String user     = (string)deserializedRequest.user;
                            String password = (string)deserializedRequest.password;

                            foreach (Jugador jugadorCrear in controller.Jugadores)
                            {
                                if (jugadorCrear.Nombre == user)
                                {
                                    throw new Exception("Este usuario ya est� logueado.");
                                }
                            }

                            AD.createUser(user, user, password);
                            response = "{\"success\":true}";
                        }
                        catch (Exception e)
                        {
                            response = "{\"success\":false}";
                            Console.WriteLine(e.Message.ToString());
                        }

                        responseBuffer = Encoding.ASCII.GetBytes(response);
                        dataStream.Write(responseBuffer, 0, responseBuffer.Length);
                        Console.WriteLine(response);
                        dataStream.Flush();

                        break;
                    }

                    case "pass":
                    {
                        controller.Pass(jugador.Nombre);
                        SendGameInformation();
                    }
                    break;

                    case "fold":
                    {
                        controller.Fold(jugador.Nombre);
                        SendGameInformation();
                    }
                    break;

                    case "call":
                    {
                        controller.Call(jugador.Nombre);
                        SendGameInformation();
                    }
                    break;

                    case "disconnect":
                    {
                        while (true)
                        {
                            if (controller.Turno == jugador.Nombre)
                            {
                                jugador.EnLinea = false;
                                controller.Fold(jugador.Nombre);
                                SendGameInformation();
                                break;
                            }
                        }
                    }
                    break;

                    default: response = "{\"success\":false}"; break;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(String.Format("{0} has disconnected", jugador.Nombre));
                Console.WriteLine(String.Format("{0} has disconnected", clientAddress));
            }
        }
Exemplo n.º 2
0
        public void fullHouse(Jugador jugador)
        {
            if (jugador.PuntajeMano == 4)
            {
                int contador1 = 0;
                int contador2 = 0;

                if (jugador.Mano[0].Leyenda.Equals(jugador.Mano[1].Leyenda))
                {
                    contador1 = 2;
                    foreach (Carta c in CartasComunes)
                    {
                        if (c.Leyenda.Equals(jugador.Mano[0].Leyenda))
                        {
                            contador1 = 1;
                            break;
                        }
                    }
                    if (contador1 > 2)
                    {
                        foreach (Carta c in CartasComunes)
                        {
                            if (!c.Leyenda.Equals(jugador.Mano[0].Leyenda))
                            {
                                contador2 = 0;
                                foreach (Carta k in CartasComunes)
                                {
                                    if (k.Leyenda.Equals(c.Leyenda))
                                    {
                                        contador2 += 1;
                                    }
                                }
                                if (contador2 >= 2 && contador1 >= 3)
                                {
                                    jugador.PuntajeMano = 7;
                                }
                                break;
                            }
                        }
                    }
                    else
                    {
                        foreach (Carta c in CartasComunes)
                        {
                            if (!c.Leyenda.Equals(jugador.Mano[0].Leyenda))
                            {
                                contador2 = 0;
                                foreach (Carta k in CartasComunes)
                                {
                                    if (k.Leyenda.Equals(c.Leyenda))
                                    {
                                        contador2 += 1;
                                    }
                                }
                                if (contador2 >= 3 && contador1 >= 2)
                                {
                                    jugador.PuntajeMano = 7;
                                }
                                break;
                            }
                        }
                    }
                }
                else
                {
                    contador1 = 1;
                    contador2 = 2;
                    foreach (Carta c in CartasComunes)
                    {
                        if (c.Leyenda.Equals(jugador.Mano[0].Leyenda))
                        {
                            contador1 += 1;
                        }
                        else if (c.Leyenda.Equals(jugador.Mano[1].Leyenda))
                        {
                            contador2 += 1;
                        }
                    }
                    if (contador1 >= 2 && contador2 >= 3 || contador1 >= 3 && contador2 >= 2)
                    {
                        jugador.PuntajeMano = 7;
                    }
                }
            }
        }