|
|
|
@ -57,7 +57,7 @@ namespace Server
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void ReceiveMessages(UdpClient clientSocket1, UdpClient clientSocket2)
|
|
|
|
|
public void ReceiveMessages(UdpClient clientSocket1, UdpClient clientSocket2, IPEndPoint endpoint2, SemaphoreSlim semaphore)
|
|
|
|
|
{
|
|
|
|
|
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
|
|
|
|
|
|
|
|
|
@ -65,7 +65,12 @@ namespace Server
|
|
|
|
|
{
|
|
|
|
|
byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint);
|
|
|
|
|
|
|
|
|
|
clientSocket2.Send(receivedData, receivedData.Length, remoteEndPoint);
|
|
|
|
|
semaphore.Wait();
|
|
|
|
|
|
|
|
|
|
clientSocket2.Send(receivedData, receivedData.Length, endpoint2);
|
|
|
|
|
|
|
|
|
|
semaphore.Release();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -88,18 +93,26 @@ namespace Server
|
|
|
|
|
|
|
|
|
|
byte[] receivedDataHost = playerHost.Value.Receive(ref remoteEndPointHost);
|
|
|
|
|
byte[] receivedDataJoin = playerJoin.Value.Receive(ref remoteEndPointJoin);
|
|
|
|
|
Console.WriteLine("blabla");
|
|
|
|
|
|
|
|
|
|
playerJoin.Value.Send(receivedDataHost, receivedDataHost.Length, remoteEndPointHost);
|
|
|
|
|
playerHost.Value.Send(receivedDataJoin, receivedDataJoin.Length, remoteEndPointJoin);
|
|
|
|
|
|
|
|
|
|
Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value));
|
|
|
|
|
SemaphoreSlim semaphore = new SemaphoreSlim(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value, remoteEndPointJoin, semaphore));
|
|
|
|
|
|
|
|
|
|
Thread receiveThread2 = new Thread(() => ReceiveMessages(playerJoin.Value, playerHost.Value));
|
|
|
|
|
|
|
|
|
|
Thread receiveThread2 = new Thread(() => {
|
|
|
|
|
// Attente pour que le joueur 1 ait envoyé ses données avant de démarrer la réception des données du joueur 2
|
|
|
|
|
semaphore.Wait();
|
|
|
|
|
ReceiveMessages(playerJoin.Value, playerHost.Value, remoteEndPointHost, semaphore);
|
|
|
|
|
});
|
|
|
|
|
receiveThread1.Start();
|
|
|
|
|
receiveThread2.Start();
|
|
|
|
|
|
|
|
|
|
semaphore.Release();
|
|
|
|
|
|
|
|
|
|
receiveThread1.Join();
|
|
|
|
|
receiveThread2.Join();
|
|
|
|
|
|
|
|
|
|