From 3121071b16352f083653030e74764ab100d1d866 Mon Sep 17 00:00:00 2001 From: rakhedair Date: Wed, 29 Mar 2023 22:52:10 +0200 Subject: [PATCH] =?UTF-8?q?am=C3=A9illoration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/server/Server/PongServer.cs | 2 +- code/server/Server/Room.cs | 27 +++++++++++++++++++++----- code/server/Shared/DTO/Action.cs | 3 ++- code/server/Shared/DTO/GameEntities.cs | 20 +++++++++++++++++++ 4 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 code/server/Shared/DTO/GameEntities.cs diff --git a/code/server/Server/PongServer.cs b/code/server/Server/PongServer.cs index 6e453a5..679a81a 100644 --- a/code/server/Server/PongServer.cs +++ b/code/server/Server/PongServer.cs @@ -49,7 +49,7 @@ public class PongServer if (data.Informations.Action == Shared.DTO.Action.Join) { var choisenRoom = rooms.FirstOrDefault(room => room.Key == data.Informations.IdRoom); - if(choisenRoom.Value != default && choisenRoom.Value.Availaible) + if(choisenRoom.Value != default) { Join(data, remoteEndPoint, serverSocket, choisenRoom.Value); } diff --git a/code/server/Server/Room.cs b/code/server/Server/Room.cs index e1864b2..d88e529 100644 --- a/code/server/Server/Room.cs +++ b/code/server/Server/Room.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using Shared.DTO; using System.ComponentModel; using System.Text.Json; +using static System.Formats.Asn1.AsnWriter; namespace Server { @@ -20,7 +21,7 @@ namespace Server Id = id; Availaible = availaible; } - + Tuple ScoreImp = new(0, 0); public bool Availaible { get; set; } public event PropertyChangedEventHandler? PropertyChanged; @@ -57,23 +58,39 @@ namespace Server - public void ReceiveMessages(UdpClient clientSocket1, UdpClient clientSocket2, IPEndPoint endpoint2, Semaphore semaphore) + public void ReceiveMessages(UdpClient clientSocket1, UdpClient clientSocket2, IPEndPoint endpoint2, Semaphore semaphore,bool isHost) { IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); Thread secondsCount = new Thread(new ThreadStart(CountSeconds)); + + secondsCount.Start(); //while (secondsCount.ThreadState==ThreadState.Running ) - while (true) + while (ScoreImp.Item1<6 && ScoreImp.Item2 < 6) { byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint); + if (isHost) { + string fileJson = Encoding.UTF8.GetString(receivedData); + try + { + ObjectTransfert>> data = JsonSerializer.Deserialize>>>(fileJson); + ScoreImp = data.Data.Item2 != null ? data.Data.Item2 : ScoreImp; + } + catch (Exception ex) { } + + + Console.WriteLine("score 1 : " + ScoreImp.Item1 + " " + ScoreImp.Item2); + } + semaphore.WaitOne(); clientSocket2.Send(receivedData, receivedData.Length, endpoint2); semaphore.Release(); } Availaible = true; + Console.WriteLine("Game Finished Am i host " + isHost); } static void CountSeconds() @@ -110,12 +127,12 @@ namespace Server Semaphore semaphore = new Semaphore(2, 2); - Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value, remoteEndPointJoin, semaphore)); + Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value, remoteEndPointJoin, semaphore,true)); Thread receiveThread2 = new Thread(() => { - ReceiveMessages(playerJoin.Value, playerHost.Value, remoteEndPointHost, semaphore); + ReceiveMessages(playerJoin.Value, playerHost.Value, remoteEndPointHost, semaphore,false); }); receiveThread1.Start(); receiveThread2.Start(); diff --git a/code/server/Shared/DTO/Action.cs b/code/server/Shared/DTO/Action.cs index 2b149a3..94cf7c0 100644 --- a/code/server/Shared/DTO/Action.cs +++ b/code/server/Shared/DTO/Action.cs @@ -15,6 +15,7 @@ namespace Shared.DTO SendPlayer, RecivePlayer, - SendEntities + SendEntities, + SendScore } } diff --git a/code/server/Shared/DTO/GameEntities.cs b/code/server/Shared/DTO/GameEntities.cs new file mode 100644 index 0000000..1571f47 --- /dev/null +++ b/code/server/Shared/DTO/GameEntities.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTO +{ + public class GameEntities + { + public Tuple Ball { get; set; } + public float Paddle { get; set; } + + public GameEntities(Tuple ball, float paddle) + { + Ball = ball; + Paddle = paddle; + } + } +}