UdpConnection.cs 1.9 KB

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