On fait maintenant en fonction du temps pour liberer le port, optimisatonnnn!!!
continuous-integration/drone/push Build is passing Details

ApiTests
Bruno DA COSTA CUNHA 2 years ago
parent a1bbc0b034
commit 10f5bda5ac

@ -41,6 +41,7 @@ public class PongServer
if (data.Informations.Action == Shared.DTO.Action.Host) if (data.Informations.Action == Shared.DTO.Action.Host)
{ {
Host(data, remoteEndPoint, serverSocket, false); Host(data, remoteEndPoint, serverSocket, false);
} }
@ -105,6 +106,8 @@ public class PongServer
rooms[data.Data.playerId] = room; rooms[data.Data.playerId] = room;
room.PropertyChanged += room.OnReadyChanged; room.PropertyChanged += room.OnReadyChanged;
Console.WriteLine("FIN HOST...............");
} }
private void Join(ObjectTransfert<Player> data, IPEndPoint remoteEndPoint, UdpClient serverSocket, Room room) private void Join(ObjectTransfert<Player> data, IPEndPoint remoteEndPoint, UdpClient serverSocket, Room room)
@ -115,7 +118,7 @@ public class PongServer
Console.WriteLine("New connection Client from " + remoteEndPoint.ToString()); Console.WriteLine("New connection Client from " + remoteEndPoint.ToString());
Tuple<int, bool> dataToSend = new Tuple<int, bool>(room.Port, true); Tuple<int, bool> dataToSend = new Tuple<int, bool>(room.Port, false);
Console.WriteLine(JsonSerializer.Serialize(dataToSend)); Console.WriteLine(JsonSerializer.Serialize(dataToSend));
// Send port message to client // Send port message to client
@ -125,6 +128,7 @@ public class PongServer
room.PropertyChanged += room.OnReadyChanged; room.PropertyChanged += room.OnReadyChanged;
room.NbPlayer++; room.NbPlayer++;
Console.WriteLine("FIN JOIN...............");
} }
} }

@ -61,59 +61,74 @@ namespace Server
{ {
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
Thread secondsCount = new Thread(new ThreadStart(CountSeconds));
secondsCount.Start();
//while (secondsCount.ThreadState==ThreadState.Running )
while (true) while (true)
{ {
byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint); byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint);
semaphore.WaitOne(); semaphore.WaitOne();
clientSocket2.Send(receivedData, receivedData.Length, endpoint2); clientSocket2.Send(receivedData, receivedData.Length, endpoint2);
semaphore.Release(); semaphore.Release();
}
Availaible = true;
}
static void CountSeconds()
{
int seconds = 0;
while (seconds<=121)
{
seconds++;
Thread.Sleep(1000);
} }
} }
public void OnReadyChanged(object sender, PropertyChangedEventArgs e) public void OnReadyChanged(object sender, PropertyChangedEventArgs e)
{ {
/*Thread principal = new Thread(() =>
Room room = sender as Room; {*/
int maxPlayer = room.nbPlayer; Room room = sender as Room;
int maxPlayer = room.nbPlayer;
if (maxPlayer == 2)
{
room.Availaible = false;
IPEndPoint remoteEndPointHost = new IPEndPoint(IPAddress.Any, room.Port);
IPEndPoint remoteEndPointJoin = new IPEndPoint(IPAddress.Any, room.Port);
if (maxPlayer == 2)
{
IPEndPoint remoteEndPointHost = new IPEndPoint(IPAddress.Any, room.Port);
IPEndPoint remoteEndPointJoin = new IPEndPoint(IPAddress.Any, room.Port);
byte[] receivedDataHost = playerHost.Value.Receive(ref remoteEndPointHost);
byte[] receivedDataJoin = playerJoin.Value.Receive(ref remoteEndPointJoin);
playerJoin.Value.Send(receivedDataHost, receivedDataHost.Length, remoteEndPointHost);
playerHost.Value.Send(receivedDataJoin, receivedDataJoin.Length, remoteEndPointJoin);
Semaphore semaphore = new Semaphore(2,2); byte[] receivedDataHost = playerHost.Value.Receive(ref remoteEndPointHost);
byte[] receivedDataJoin = playerJoin.Value.Receive(ref remoteEndPointJoin);
playerJoin.Value.Send(receivedDataHost, receivedDataHost.Length, remoteEndPointHost);
playerHost.Value.Send(receivedDataJoin, receivedDataJoin.Length, remoteEndPointJoin);
Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value, remoteEndPointJoin, semaphore)); Semaphore semaphore = new Semaphore(2, 2);
Thread receiveThread2 = new Thread(() => { Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value, remoteEndPointJoin, semaphore));
ReceiveMessages(playerJoin.Value, playerHost.Value, remoteEndPointHost, semaphore);
});
receiveThread1.Start();
receiveThread2.Start();
receiveThread1.Join(); Thread receiveThread2 = new Thread(() =>
receiveThread2.Join(); {
ReceiveMessages(playerJoin.Value, playerHost.Value, remoteEndPointHost, semaphore);
});
receiveThread1.Start();
receiveThread2.Start();
} receiveThread1.Join();
receiveThread2.Join();
}
/*});
principal.Start();*/
} }
} }
} }

Loading…
Cancel
Save