diff --git a/code/server/Server/PongServer.cs b/code/server/Server/PongServer.cs index f7881e1..22bc8c7 100644 --- a/code/server/Server/PongServer.cs +++ b/code/server/Server/PongServer.cs @@ -76,71 +76,50 @@ public class PongServer private void Host(ObjectTransfert data, IPEndPoint remoteEndPoint, UdpClient serverSocket, bool availaible) { Room room = new Room(data.Data.playerId, availaible); - room.playerHost = data.Data; - room.nbPlayer++; - - room.PropertyChanged += OnReadyChanged; - Console.WriteLine("New connection from " + remoteEndPoint.ToString()); // Assign a unique port to the client IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort); + UdpClient clientSocket = new UdpClient(clientEndPoint); + + room.playerHost = new KeyValuePair(data.Data,clientSocket); + room.nbPlayer++; + + room.PropertyChanged += room.OnReadyChanged; + + Console.WriteLine("New connection Host From " + remoteEndPoint.ToString()); + + room.Port = nextPort; nextPort++; - UdpClient clientSocket = new UdpClient(clientEndPoint); + clients[remoteEndPoint] = clientSocket; // Send connection message to client byte[] connectionData = Encoding.ASCII.GetBytes(room.Id); serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint); - // Start thread to receive data from client - Thread receiveThread = new Thread(() => room.ReceiveMessages(clientSocket, data.Data)); - receiveThread.Start(); } private void Join(ObjectTransfert data, IPEndPoint remoteEndPoint, UdpClient serverSocket, Room room) { - Console.WriteLine("New connection from " + remoteEndPoint.ToString()); // Assign a unique port to the client - IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort++); + IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort); UdpClient clientSocket = new UdpClient(clientEndPoint); - clients[remoteEndPoint] = clientSocket; - - // Send connection message to client - string connectionMessage = clientEndPoint.Port.ToString(); - byte[] connectionData = Encoding.ASCII.GetBytes(connectionMessage); - serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint); - // Start thread to receive data from client - Thread receiveThread = new Thread(() => room.ReceiveMessages(clientSocket, data.Data)); - receiveThread.Start(); - } + room.playerJoin = new KeyValuePair(data.Data, clientSocket); + room.nbPlayer++; - private void OnReadyChanged(object sender, PropertyChangedEventArgs e) - { - - Room nbPlayer = sender as Room; - bool maxPlayer = nbPlayer.maxPlayer; + room.PropertyChanged += room.OnReadyChanged; - IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, listenPort); - UdpClient serverSocket = new UdpClient(serverEndPoint); + Console.WriteLine("New connection Client from " + remoteEndPoint.ToString()); - if (maxPlayer) - { - while (true) - { - //Faut finir ça mnt - IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); - byte[] receivedData = serverSocket.Receive(ref remoteEndPoint); + room.Port = nextPort; + nextPort++; - } - } - } - } \ No newline at end of file diff --git a/code/server/Server/Room.cs b/code/server/Server/Room.cs index 1f40938..d26de3e 100644 --- a/code/server/Server/Room.cs +++ b/code/server/Server/Room.cs @@ -26,8 +26,8 @@ namespace Server public string Id { get; set; } - public Player playerHost; - public Player playerJoin; + public KeyValuePair playerHost; + public KeyValuePair playerJoin; public int Port { get; set; } @@ -54,25 +54,49 @@ namespace Server - public void ReceiveMessages(UdpClient clientSocket,Player player) + public void ReceiveMessages(UdpClient clientSocket1, UdpClient clientSocket2) { IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); while (true) { - byte[] receivedData = clientSocket.Receive(ref remoteEndPoint); + byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint); + string receivedMessage = Encoding.ASCII.GetString(receivedData); Console.WriteLine("Received from " + remoteEndPoint.ToString() + ": " + receivedMessage); - - while (true) //score - { - //cordinate paddel - receivedData = clientSocket.Receive(ref remoteEndPoint); - receivedMessage = Encoding.ASCII.GetString(receivedData); - - } + + clientSocket2.Send(receivedData, receivedData.Length, remoteEndPoint); + + } + } + + public void OnReadyChanged(object sender, PropertyChangedEventArgs e) + { + + Room nbPlayer = sender as Room; + bool maxPlayer = nbPlayer.maxPlayer; + + IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, Port); + UdpClient serverSocket = new UdpClient(serverEndPoint); + + if (maxPlayer) + { + + Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value)); + + + Thread receiveThread2 = new Thread(() => ReceiveMessages(playerJoin.Value, playerHost.Value)); + + receiveThread1.Start(); + receiveThread2.Start(); + + receiveThread1.Join(); + receiveThread2.Join(); + + } + } }