DoctorModel.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using System.Windows.Forms.DataVisualization.Charting;
  9. using Measurement = FietsLibrary.JSONObjecten.Measurement;
  10. using FietsLibrary.JSONObjecten;
  11. using FietsLibrary;
  12. namespace FietsClient
  13. {
  14. class DoctorModel
  15. {
  16. private static DoctorModel _doctorModel;
  17. public DoctorForm doctorform { get; set; }
  18. public static DoctorModel doctorModel { get { return _doctorModel ?? (_doctorModel = new DoctorModel()); } }
  19. public TcpConnection tcpConnection { get; set; }
  20. private Thread receiveDataThread;
  21. public List<string> onlinePatients { get; set; } = new List<string>();
  22. public Dictionary<string, Forms.DoctorSessionUC> doctorSessions { get; set; } = new Dictionary<string, Forms.DoctorSessionUC>();
  23. private DoctorModel()
  24. {
  25. startAskingData();
  26. }
  27. public void startAskingData()
  28. {
  29. receiveDataThread = new Thread(() => receiveDataThreadLoop());
  30. receiveDataThread.Start();
  31. }
  32. public void stopAskingData()
  33. {
  34. receiveDataThread.Abort();
  35. }
  36. private void receiveDataThreadLoop()
  37. {
  38. while (true)
  39. {
  40. Thread.Sleep(1000);
  41. //receive data and display in through handle bike data
  42. //HandleBikeData(tcpConnection.currentData.GetSessions().Last().GetLastMeasurement());
  43. CheckOnlineUsersUpdated(); //misschien alleen als er wat binnenkomt? ff over nadenken nog
  44. }
  45. }
  46. public void CheckOnlineUsersUpdated()
  47. {
  48. tcpConnection.SendGetActivePatients();
  49. if (onlinePatients.Count != doctorSessions.Count || true)
  50. {
  51. // ruim eerst alle doctorSessions op die niet van toepassing zijn
  52. List<string> temp = doctorSessions.Keys.ToList();
  53. foreach (string str in temp)
  54. {
  55. if (!(onlinePatients.Any(s => str.Contains(s))))
  56. {
  57. doctorform.Invoke(new Action(() => doctorform.RemoveSessionFromTabcontrol(str)));
  58. doctorform.Invoke(new Action(() => doctorSessions.Remove(str)));
  59. }
  60. //onlinePatients.Find(username => username.Equals(str));
  61. }
  62. //voeg een onlinePatient toe aan een doctorSession
  63. foreach (string onlinePatient in onlinePatients)
  64. {
  65. if (!(doctorSessions.Keys.Any(s => onlinePatient.Contains(s))))
  66. doctorform.Invoke(new Action(() => doctorform.AddSessionToTabcontrol(onlinePatient)));
  67. }
  68. }
  69. }
  70. //display values
  71. private List<DataPoint> speedPoints = new List<DataPoint>();
  72. private List<DataPoint> bpmPoints = new List<DataPoint>();
  73. private List<DataPoint> rpmPoints = new List<DataPoint>();
  74. private void HandleBikeData(Measurement data)
  75. {
  76. if (doctorform.InvokeRequired)
  77. {
  78. doctorform.Invoke((new Action(() => HandleBikeData(data))));
  79. }
  80. else
  81. {
  82. //fill fields
  83. doctorform.summaryUserControl.pulseBox.Text = data.pulse.ToString();
  84. doctorform.summaryUserControl.rpmInfoBox.Text = data.rpm.ToString();
  85. doctorform.summaryUserControl.speedInfoBox.Text = data.speed.ToString();
  86. doctorform.summaryUserControl.distanceInfoBox.Text = data.distance.ToString();
  87. doctorform.summaryUserControl.requestedBox.Text = data.requestedPower.ToString();
  88. doctorform.summaryUserControl.energyInfoBox.Text = data.energy.ToString();
  89. doctorform.summaryUserControl.timeBox.Text = data.time.ToString() ;
  90. doctorform.summaryUserControl.actualBox.Text = data.actualPower.ToString();
  91. //fill graph speed
  92. speedPoints.Add(new DataPoint(Convert.ToDateTime(data.time.ToString()).ToOADate(), Convert.ToDouble(data.speed.ToString())));
  93. doctorform.summaryUserControl.speedChart.Series[0].Points.Clear();
  94. for (int i = 0; i < speedPoints.Count; i++)
  95. doctorform.summaryUserControl.speedChart.Series[0].Points.Add(speedPoints[i]);
  96. if (speedPoints.Count > 25)
  97. speedPoints.RemoveAt(0);
  98. doctorform.summaryUserControl.speedChart.Update();
  99. //fill graph pulse
  100. bpmPoints.Add(new DataPoint(Convert.ToDateTime(data.time.ToString()).ToOADate(), Convert.ToDouble(data.pulse.ToString())));
  101. doctorform.summaryUserControl.bpmChart.Series[0].Points.Clear();
  102. for (int i = 0; i < bpmPoints.Count; i++)
  103. doctorform.summaryUserControl.bpmChart.Series[0].Points.Add(bpmPoints[i]);
  104. if (bpmPoints.Count > 25)
  105. bpmPoints.RemoveAt(0);
  106. doctorform.summaryUserControl.speedChart.Update();
  107. //fill graph rpm
  108. rpmPoints.Add(new DataPoint(Convert.ToDateTime(data.time.ToString()).ToOADate(), Convert.ToDouble(data.rpm.ToString())));
  109. doctorform.summaryUserControl.rpmChart.Series[0].Points.Clear();
  110. for (int i = 0; i < rpmPoints.Count; i++)
  111. doctorform.summaryUserControl.rpmChart.Series[0].Points.Add(rpmPoints[i]);
  112. if (rpmPoints.Count > 25)
  113. rpmPoints.RemoveAt(0);
  114. doctorform.summaryUserControl.rpmChart.Update();
  115. }
  116. }
  117. }
  118. }