DoctorModel.cs 5.9 KB

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