UdpConnection.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Sensors.Polar
  7. {
  8. public class UdpConnection
  9. {
  10. //public int port = 9090;
  11. //public String ipAddress = "192.168.1.7";
  12. private readonly UdpClient client;
  13. private bool listening;
  14. private readonly Action<AccData> onAccData;
  15. private readonly Action<EcgData> onEcgData;
  16. private readonly Action<HRData> onHRData;
  17. public UdpConnection(string ipAddress, int port, Action<AccData> onAccData, Action<EcgData> onEcgData,
  18. Action<HRData> onHrData)
  19. {
  20. this.onAccData = onAccData;
  21. this.onEcgData = onEcgData;
  22. onHRData = onHrData;
  23. var parsedAddress = IPAddress.Parse(ipAddress);
  24. client = new UdpClient(new IPEndPoint(parsedAddress, port));
  25. }
  26. public void Listen()
  27. {
  28. Task.Run(async () =>
  29. {
  30. listening = true;
  31. while (listening)
  32. {
  33. var result = await client.ReceiveAsync();
  34. var receivedStr = Encoding.UTF8.GetString(result.Buffer);
  35. var data = receivedStr.Split(':');
  36. if (data.Length == 2)
  37. {
  38. var name = data[0];
  39. if (name.Equals("ACC"))
  40. onAccData(AccData.FromString(data[1]));
  41. else if (name.Equals("ECG"))
  42. onEcgData(EcgData.FromString(data[1]));
  43. else if (name.Equals("HR")) onHRData(HRData.FromString(data[1]));
  44. }
  45. //Debug.Log($"RECEIVED DATA VIA UDP: {receivedStr}");
  46. }
  47. });
  48. }
  49. public void StopListening()
  50. {
  51. listening = false;
  52. }
  53. }
  54. }