Receiving UDP data from UDP Multicast channel

This commit is contained in:
Stedd 2023-10-21 19:38:39 +02:00
parent 421750f120
commit 0b09d473e4
1 changed files with 15 additions and 6 deletions

View File

@ -9,15 +9,24 @@ namespace GameDev.UDP
public class UDPManager : MonoBehaviour public class UDPManager : MonoBehaviour
{ {
[SerializeField] private int _port; [SerializeField] private int _port;
[SerializeField] private string _ipAddress;
[SerializeField] private bool listen; [SerializeField] private bool listen;
[Header("State")]
[SerializeField] private byte _watchdog;
private UdpClient UdpClient { get; set; } private UdpClient UdpClient { get; set; }
private Thread _receiveThread; private Thread _receiveThread;
private void Start() private IPAddress _ipAddressParsed;
private void OnEnable()
{ {
_ipAddressParsed = IPAddress.Parse(_ipAddress);
UdpClient = new(_port); UdpClient = new(_port);
UdpClient.JoinMulticastGroup(_ipAddressParsed);
_receiveThread = new(ReceiveData); _receiveThread = new(ReceiveData);
_receiveThread.IsBackground = true; _receiveThread.IsBackground = true;
_receiveThread.Start(); _receiveThread.Start();
@ -25,15 +34,15 @@ namespace GameDev.UDP
private void ReceiveData() private void ReceiveData()
{ {
IPEndPoint ipEndPoint = new(_ipAddressParsed, _port);
while (true) while (true)
{ {
try try
{ {
IPEndPoint anyIP = new(IPAddress.Any, _port); var data = UdpClient.Receive(ref ipEndPoint);
var data = UdpClient.Receive(ref anyIP);
var text = Encoding.UTF8.GetString(data); _watchdog = data[0];
Debug.Log($"Received: {text}");
} }
catch (SocketException e) catch (SocketException e)
{ {
@ -42,7 +51,7 @@ namespace GameDev.UDP
} }
} }
private void OnApplicationQuit() private void OnDisable()
{ {
if (_receiveThread is { IsAlive: true }) if (_receiveThread is { IsAlive: true })
{ {