Пример #1
0
        static void ServerResponse(Object o)
        {
            NetworkStream serverNs = null;
            TcpClient     client   = (TcpClient)o;

            try
            {
                // Primeramente generamos un objeto jugador asociado al cliente que se conecte y le enviamos los datos generados, en este caso, su Id asociada
                serverNs = client.GetStream();
                string generatedIdString = GeneratePlayer(serverNs).ToString();

                byte[] idBytes = Encoding.UTF8.GetBytes(generatedIdString);

                serverNs.Write(idBytes, 0, idBytes.Length);
            }
            catch (Exception e)
            {
                serverNs.Close();
                client.Close();
                //Manejamos el error si la conexion no ha sido posible
                Console.WriteLine("Ha habido un error con la conexion");
            }

            if (serverNs != null)
            {
                while (true)
                {
                    // Si el NetworkStream del server no es null, creamos un bucle infinito que se encarga de ir escuchando los datos de los jugadores conectados y reenviarlo a todos los demás
                    byte[] localBuffer   = new byte[256];
                    int    receivedBytes = serverNs.Read(localBuffer, 0, localBuffer.Length);

                    // Los datos que envía un Jugador será la posición de su bola, si lo queremos mostrar por la consola del server, necesitamos Deserialitzar el objeto recibido y acceder a sus atributos
                    Position receivedPosition;
                    receivedPosition = (Position)Position.Deserialize(localBuffer);

                    Console.WriteLine(receivedPosition.posX);
                    Console.WriteLine(receivedPosition.posY);

                    // Para reenviar la posición a los demás jugadores excepto el cliente origen, hacemos un recorrido de la lista de Jugadores y enviamos la posición a todos los jugadores que tengan un
                    // NetworkStream diferente al del origen
                    for (int i = 0; i < players.Count; i++)
                    {
                        Player player = players[i];

                        if (player.NetworkStream != serverNs)
                        {
                            player.NetworkStream.Write(localBuffer, 0, receivedBytes);
                        }
                    }
                }
            }
        }
Пример #2
0
        static void ServerResponse(Object o)
        {
            NetworkStream serverNs = null;
            TcpClient     client   = (TcpClient)o;

            try
            {
                // Primerament generem un objecte jugador associat al client que es connecti i li enviem les dades generades, en aquest cas, la seva Id associada
                serverNs = client.GetStream();
                string generatedIdString = GeneratePlayer(serverNs).ToString();

                byte[] idBytes = Encoding.UTF8.GetBytes(generatedIdString);

                serverNs.Write(idBytes, 0, idBytes.Length);
            } catch (Exception e)
            {
                serverNs.Close();
                client.Close();

                Console.WriteLine("Hi ha hagut un error amb la connexió");
            }

            if (serverNs != null)
            {
                while (true)
                {
                    // Si el NetworkStream del server no és null, creem un bucle infinit que s'encarrega d'anar escoltant dades dels jugadors connectats i reenviar-les a tots els altres
                    byte[] localBuffer   = new byte[256];
                    int    receivedBytes = serverNs.Read(localBuffer, 0, localBuffer.Length);

                    // Les dades que envia un Jugador serà la posició de la seva bola, si ho volem mostrar per la consola del server, necessitem Deserialitzar l'objecte rebut i accedir als seus atributs
                    Position receivedPosition;
                    receivedPosition = (Position)Position.Deserialize(localBuffer);

                    Console.WriteLine(receivedPosition.PosX);
                    Console.WriteLine(receivedPosition.PosY);

                    // Per reenviar la posició als altres jugadors excepte el client origen, fem un recorregut de la llista de Jugadors i enviem la posició a tots els jugadors que tinguin un
                    // NetworkStream diferent al de l'origen
                    for (int i = 0; i < players.Count; i++)
                    {
                        Player player = players[i];

                        if (player.NetworkStream != serverNs)
                        {
                            player.NetworkStream.Write(localBuffer, 0, receivedBytes);
                        }
                    }
                }
            }
        }