diff --git a/code/server/Server/PongServer.cs b/code/server/Server/PongServer.cs index bd9fa6a..b6cc080 100644 --- a/code/server/Server/PongServer.cs +++ b/code/server/Server/PongServer.cs @@ -62,17 +62,16 @@ public class PongServer Console.WriteLine("Connection " + choisenRoom.Key); if (choisenRoom.Value != default ) { - Thread join = new Thread(() => Join(data, remoteEndPoint, serverSocket, choisenRoom.Value)); - join.Start(); + Join(data, remoteEndPoint, serverSocket, choisenRoom.Value); } else { - Thread host = new Thread(() => Host(data, remoteEndPoint, serverSocket, true)); - host.Start(); + Host(data, remoteEndPoint, serverSocket, true); } } + Console.WriteLine(""); } @@ -80,11 +79,22 @@ public class PongServer private void Host(ObjectTransfert data, IPEndPoint remoteEndPoint, UdpClient serverSocket, bool availaible) { + var choisenRoom = rooms.FirstOrDefault(room => room.Value.Free); + var chosenPort = nextPort; + if (choisenRoom.Value != default) + { + chosenPort= choisenRoom.Value.Port; + choisenRoom.Value.playerHost.Value.Close(); + choisenRoom.Value.playerJoin.Value.Close(); + rooms.Remove(choisenRoom.Key); + choisenRoom = default; + } + Room room = new Room(data.Data.playerId, availaible); // Assign a unique port to the client - IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort); + IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, chosenPort); UdpClient clientSocket = new UdpClient(clientEndPoint); room.playerHost = new KeyValuePair(data.Data,clientSocket); @@ -95,8 +105,12 @@ public class PongServer Console.WriteLine("New connection Host From " + remoteEndPoint.ToString()); - room.Port = nextPort; - nextPort++; + room.Port = chosenPort; + if(chosenPort==nextPort) + { + nextPort++; + } + Tuple dataToSend = new Tuple(room.Port, true); @@ -107,7 +121,7 @@ public class PongServer serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint); rooms[data.Data.playerId] = room; - room.PropertyChanged += room.OnReadyChanged; + Console.WriteLine("FIN HOST..............."); diff --git a/code/server/Server/Room.cs b/code/server/Server/Room.cs index 76a33b6..197614a 100644 --- a/code/server/Server/Room.cs +++ b/code/server/Server/Room.cs @@ -24,6 +24,8 @@ namespace Server Tuple ScoreImp = new(0, 0); public bool Availaible { get; set; } + public bool Free { get; set; }=false; + public event PropertyChangedEventHandler? PropertyChanged; public string Id { get; set; } @@ -86,8 +88,14 @@ namespace Server clientSocket2.Send(receivedData, receivedData.Length, endpoint2); semaphore.Release(); } - Availaible = true; - + Free = true; + + /* playerHost = default; + playerJoin = default; + gameRunning = true; + ScoreImp = new(0, 0);*/ + + Console.WriteLine("Game Finished Am i host " + isHost); } @@ -102,10 +110,10 @@ namespace Server gameRunning = false; } - public void OnReadyChanged(object sender, PropertyChangedEventArgs e) + async public void OnReadyChanged(object sender, PropertyChangedEventArgs e) { - /*Thread principal = new Thread(() => - {*/ + await Task.Run(() => + { Room room = sender as Room; int maxPlayer = room.nbPlayer; @@ -141,8 +149,8 @@ namespace Server receiveThread2.Join(); } - /*}); - principal.Start();*/ + }); + }