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); } } } } }
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); } } } } }