lastBranch #9

Merged
rami.khedair merged 5 commits from lastBranch into master 1 year ago

@ -62,17 +62,16 @@ public class PongServer
Console.WriteLine("Connection " + choisenRoom.Key); Console.WriteLine("Connection " + choisenRoom.Key);
if (choisenRoom.Value != default ) if (choisenRoom.Value != default )
{ {
Thread join = new Thread(() => Join(data, remoteEndPoint, serverSocket, choisenRoom.Value)); Join(data, remoteEndPoint, serverSocket, choisenRoom.Value);
join.Start();
} }
else else
{ {
Thread host = new Thread(() => Host(data, remoteEndPoint, serverSocket, true)); Host(data, remoteEndPoint, serverSocket, true);
host.Start();
} }
} }
Console.WriteLine("");
} }
@ -80,11 +79,20 @@ public class PongServer
private void Host(ObjectTransfert<Player> data, IPEndPoint remoteEndPoint, UdpClient serverSocket, bool availaible) private void Host(ObjectTransfert<Player> 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;
rooms.Remove(choisenRoom.Key);
choisenRoom = default;
}
Room room = new Room(data.Data.playerId, availaible); Room room = new Room(data.Data.playerId, availaible);
// Assign a unique port to the client // 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); UdpClient clientSocket = new UdpClient(clientEndPoint);
room.playerHost = new KeyValuePair<Player,UdpClient>(data.Data,clientSocket); room.playerHost = new KeyValuePair<Player,UdpClient>(data.Data,clientSocket);
@ -95,8 +103,12 @@ public class PongServer
Console.WriteLine("New connection Host From " + remoteEndPoint.ToString()); Console.WriteLine("New connection Host From " + remoteEndPoint.ToString());
room.Port = nextPort; room.Port = chosenPort;
nextPort++; if(chosenPort==nextPort)
{
nextPort++;
}
Tuple<int, bool> dataToSend = new Tuple<int, bool>(room.Port, true); Tuple<int, bool> dataToSend = new Tuple<int, bool>(room.Port, true);
@ -107,7 +119,7 @@ public class PongServer
serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint); serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
rooms[data.Data.playerId] = room; rooms[data.Data.playerId] = room;
room.PropertyChanged += room.OnReadyChanged;
Console.WriteLine("FIN HOST..............."); Console.WriteLine("FIN HOST...............");

@ -22,8 +22,13 @@ namespace Server
Availaible = availaible; Availaible = availaible;
} }
Tuple<int, int> ScoreImp = new(0, 0); Tuple<int, int> ScoreImp = new(0, 0);
ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>> data ;
public bool Availaible { get; set; } public bool Availaible { get; set; }
public bool Free { get; set; }=false;
public event PropertyChangedEventHandler? PropertyChanged; public event PropertyChangedEventHandler? PropertyChanged;
public string Id { get; set; } public string Id { get; set; }
@ -64,30 +69,69 @@ namespace Server
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
Thread secondsCount = new Thread(() => CountSeconds() ); Thread secondsCount = new Thread(() => CountSeconds() );
bool isDisconected=false;
secondsCount.Start(); secondsCount.Start();
while ((ScoreImp.Item1<6 && ScoreImp.Item2 < 6) && gameRunning) while ((ScoreImp.Item1<6 && ScoreImp.Item2 < 6) && gameRunning)
{ {
byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint); try
if (isHost) { {
string fileJson = Encoding.UTF8.GetString(receivedData); byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint);
if (isHost) {
string fileJson = Encoding.UTF8.GetString(receivedData);
try
{
data = JsonSerializer.Deserialize<ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>>>(fileJson);
ScoreImp = data.Data.Item2 != null ? data.Data.Item2 : ScoreImp;
}
catch (Exception ex) { }
}
semaphore.WaitOne();
clientSocket2.Send(receivedData, receivedData.Length, endpoint2);
semaphore.Release();
} catch (SocketException){
try try
{ {
ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>> data = JsonSerializer.Deserialize<ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>>>(fileJson); semaphore.Release();
ScoreImp = data.Data.Item2 != null ? data.Data.Item2 : ScoreImp;
} }catch { }
catch (Exception ex) { } isDisconected = true;
break;
} }
}
semaphore.WaitOne(); //Tuple<GameEntities, Tuple<int, int>> game = new Tuple<GameEntities, Tuple<int, int>>(new GameEntities(new Tuple<float,float>(0,0),0), ScoreImp);
/* ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>> data2 = new ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>>() {
Informations = new Informations(Shared.DTO.Action.End, 0, typeof(Tuple<GameEntities, Tuple<int, int>>).ToString()),
Data = game
};*/
if (!isDisconected)
{
data.Informations.Action = Shared.DTO.Action.End;
string sendFinish = JsonSerializer.Serialize(data);
byte[] sendFinishByt = Encoding.ASCII.GetBytes(sendFinish);
try
{
clientSocket2.Send(sendFinishByt, sendFinishByt.Length, endpoint2);
}
catch (Exception ex) { }
}
if (isHost)
{
try
{
semaphore.Release();
clientSocket2.Send(receivedData, receivedData.Length, endpoint2); }
semaphore.Release(); catch { }
playerJoin.Value.Close();
}
else
{
playerHost.Value.Close();
} }
Availaible = true; Free = true;
Console.WriteLine("Game Finished Am i host " + isHost); Console.WriteLine("Game Finished Am i host " + isHost);
} }
@ -102,10 +146,10 @@ namespace Server
gameRunning = false; 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; Room room = sender as Room;
int maxPlayer = room.nbPlayer; int maxPlayer = room.nbPlayer;
@ -141,8 +185,8 @@ namespace Server
receiveThread2.Join(); receiveThread2.Join();
} }
/*}); });
principal.Start();*/
} }

Loading…
Cancel
Save