DoctorModel.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. internal List<User> requestUsers()
  37. {
  38. tcpConnection.requestUsers();
  39. Thread.Sleep(1000);
  40. return tcpConnection.users;
  41. }
  42. private void receiveDataThreadLoop()
  43. {
  44. while (true)
  45. {
  46. Thread.Sleep(1000);
  47. //receive data and display in through handle bike data
  48. //HandleBikeData(tcpConnection.currentData.GetSessions().Last().GetLastMeasurement());
  49. CheckOnlineUsersUpdated(); //misschien alleen als er wat binnenkomt? ff over nadenken nog
  50. }
  51. }
  52. public void CheckOnlineUsersUpdated()
  53. {
  54. tcpConnection.SendGetActivePatients();
  55. if (onlinePatients.Count != doctorSessions.Count || true)
  56. {
  57. // ruim eerst alle doctorSessions op die niet van toepassing zijn
  58. List<string> temp = doctorSessions.Keys.ToList();
  59. foreach (string str in temp)
  60. {
  61. if (!(onlinePatients.Any(s => str.Contains(s))))
  62. {
  63. doctorform.Invoke(new Action(() => doctorform.RemoveSessionFromTabcontrol(str)));
  64. doctorform.Invoke(new Action(() => doctorSessions.Remove(str)));
  65. }
  66. //onlinePatients.Find(username => username.Equals(str));
  67. }
  68. //voeg een onlinePatient toe aan een doctorSession
  69. foreach (string onlinePatient in onlinePatients)
  70. {
  71. if (!(doctorSessions.Keys.Any(s => onlinePatient.Contains(s))))
  72. doctorform.Invoke(new Action(() => doctorform.AddSessionToTabcontrol(onlinePatient)));
  73. }
  74. }
  75. }
  76. //display values
  77. private List<DataPoint> speedPoints = new List<DataPoint>();
  78. private List<DataPoint> bpmPoints = new List<DataPoint>();
  79. private List<DataPoint> rpmPoints = new List<DataPoint>();
  80. private void HandleBikeData(Measurement data)
  81. {
  82. if (doctorform.InvokeRequired)
  83. {
  84. doctorform.Invoke((new Action(() => HandleBikeData(data))));
  85. }
  86. else
  87. {
  88. //fill fields
  89. doctorform.summaryUserControl.pulseBox.Text = data.pulse.ToString();
  90. doctorform.summaryUserControl.rpmInfoBox.Text = data.rpm.ToString();
  91. doctorform.summaryUserControl.speedInfoBox.Text = data.speed.ToString();
  92. doctorform.summaryUserControl.distanceInfoBox.Text = data.distance.ToString();
  93. doctorform.summaryUserControl.requestedBox.Text = data.requestedPower.ToString();
  94. doctorform.summaryUserControl.energyInfoBox.Text = data.energy.ToString();
  95. doctorform.summaryUserControl.timeBox.Text = data.time.ToString();
  96. doctorform.summaryUserControl.actualBox.Text = data.actualPower.ToString();
  97. //fill graph speed
  98. speedPoints.Add(new DataPoint(Convert.ToDateTime(data.time.ToString()).ToOADate(), Convert.ToDouble(data.speed.ToString())));
  99. doctorform.summaryUserControl.speedChart.Series[0].Points.Clear();
  100. for (int i = 0; i < speedPoints.Count; i++)
  101. doctorform.summaryUserControl.speedChart.Series[0].Points.Add(speedPoints[i]);
  102. if (speedPoints.Count > 25)
  103. speedPoints.RemoveAt(0);
  104. doctorform.summaryUserControl.speedChart.Update();
  105. //fill graph pulse
  106. bpmPoints.Add(new DataPoint(Convert.ToDateTime(data.time.ToString()).ToOADate(), Convert.ToDouble(data.pulse.ToString())));
  107. doctorform.summaryUserControl.bpmChart.Series[0].Points.Clear();
  108. for (int i = 0; i < bpmPoints.Count; i++)
  109. doctorform.summaryUserControl.bpmChart.Series[0].Points.Add(bpmPoints[i]);
  110. if (bpmPoints.Count > 25)
  111. bpmPoints.RemoveAt(0);
  112. doctorform.summaryUserControl.speedChart.Update();
  113. //fill graph rpm
  114. rpmPoints.Add(new DataPoint(Convert.ToDateTime(data.time.ToString()).ToOADate(), Convert.ToDouble(data.rpm.ToString())));
  115. doctorform.summaryUserControl.rpmChart.Series[0].Points.Clear();
  116. for (int i = 0; i < rpmPoints.Count; i++)
  117. doctorform.summaryUserControl.rpmChart.Series[0].Points.Add(rpmPoints[i]);
  118. if (rpmPoints.Count > 25)
  119. rpmPoints.RemoveAt(0);
  120. doctorform.summaryUserControl.rpmChart.Update();
  121. }
  122. }
  123. }
  124. }