AppGlobal.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. using Newtonsoft.Json;
  2. using ServerV2.FileIO;
  3. using ServerV2.JSONObjecten;
  4. using ServerV2.Libraries;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.Sockets;
  10. using System.Text;
  11. using System.Threading;
  12. using System.Threading.Tasks;
  13. namespace ServerV2
  14. {
  15. class AppGlobal
  16. {
  17. private TcpListener listener;
  18. private List<Client> clients = new List<Client>();
  19. private List<User> users = new List<User>();
  20. public AppGlobal()
  21. {
  22. listener = new TcpListener(IPAddress.Any, 1288);
  23. listener.Start();
  24. while (true)
  25. {
  26. TestMethode();
  27. Console.WriteLine(FileIO.JsonConverter.GetUserSessions(users.ElementAt(1)));
  28. Console.WriteLine("waiting for clients...");
  29. TcpClient client = listener.AcceptTcpClient();
  30. Console.WriteLine("connection received");
  31. new Thread(receive).Start(client);
  32. }
  33. }
  34. private void TestMethode()
  35. {
  36. users.Add(new User("JK123", "jancoow", 5, true, 100));
  37. users.Add(new User("patient", "patient", 0, false, 0));
  38. users.Add(new User("doctor", "doctor", 0, false, 0, true));
  39. users.Add(new User("admin", "admin", 80, false, 77, true));
  40. Random r = new Random();
  41. Session session = new Session(1, "100");
  42. for (int i = 0; i < 20; i++)
  43. session.AddMeasurement(new Measurement(r.Next(100, 200), r.Next(60, 100), r.Next(100, 150), r.Next(0, 100), i, r.Next(100), r.Next(100), r.Next(100), i, r.Next(100)));
  44. users.ElementAt(1).tests.Add(session);
  45. Session session2 = new Session(2, "100");
  46. for (int i = 0; i < 50; i++)
  47. session2.AddMeasurement(new Measurement(r.Next(100, 200), r.Next(60, 100), r.Next(100, 150), r.Next(0, 100), i, r.Next(100), r.Next(100), r.Next(100), i, r.Next(100)));
  48. users.ElementAt(1).tests.Add(session2);
  49. }
  50. private void receive(object obj)
  51. {
  52. TcpClient client = obj as TcpClient;
  53. User currentUser;
  54. while (!(client.Client.Poll(0, SelectMode.SelectRead) && client.Client.Available == 0))
  55. {
  56. string[] response = Encoding.ASCII.GetString(new byte[(int)client.ReceiveBufferSize]).Split('|');
  57. switch (response[0])
  58. {
  59. case "0":
  60. if (response.Length == 4)
  61. {
  62. int admin, id = 0;
  63. //check username and password
  64. foreach (User u in users)
  65. {
  66. if (u.id == response[1] && u.password == response[2])
  67. {
  68. admin = u.isDoctor ? 1 : 0;
  69. id = users.IndexOf(u);
  70. }
  71. }
  72. if (id > -1)
  73. {
  74. if (users.First(item => item.id == response[1]).isDoctor)
  75. {
  76. Console.WriteLine($"received login from docter username: {response[1]} ");
  77. Communication.SendMessage(client, "0|1|1|"); // Doctor
  78. }
  79. else
  80. {
  81. Console.WriteLine($"received login from patient username: {response[1]} ");
  82. Communication.SendMessage(client, "0|1|0|"); //Patient
  83. }
  84. clients.Add(new Client(client, response[1]));
  85. }
  86. else
  87. {
  88. Console.WriteLine("received incorrect username or password");
  89. Communication.SendMessage(client, "0|0|0|"); // Does not exist
  90. }
  91. }
  92. break;
  93. case "1": //meetsessies ophalen
  94. currentUser = users.First(item => item.id == response[1]);
  95. Communication.SendMessage(client, "1|" + FileIO.JsonConverter.GetUserSessions(currentUser));
  96. break;
  97. case "2": //Livedata opvragen
  98. currentUser = users.First(item => item.id == response[1]);
  99. FileIO.JsonConverter.GetLastMeasurement(currentUser.tests.Last());
  100. break;
  101. case "3": //Nieuwe meetsessie aanmaken
  102. if (response.Length == 6)
  103. {
  104. foreach (User u in users)
  105. {
  106. if (u.id == response[1])
  107. u.AddSession(new Session(int.Parse(response[2]), response[3]));
  108. }
  109. }
  110. break;
  111. case "4": // Nieuwe patient
  112. users.Add(new User(response[1], response[2], Int32.Parse(response[3]), Boolean.Parse(response[4]), Int32.Parse(response[5])));
  113. break;
  114. case "5": //data pushen naar meetsessie
  115. currentUser = users.First(item => item.id == response[1]);
  116. currentUser.tests.Last().AddMeasurement(JsonConvert.DeserializeObject<Measurement>(response[2]));
  117. break;
  118. case "6": //chatberichten ontvangen van gebruikers
  119. //controleren of het bericht wel tekens bevat
  120. if (response[3] != null)
  121. {
  122. string message = response[3].TrimEnd('\0');
  123. string receiver = response[2];
  124. string sender = response[1];
  125. string case6str = "7|" + sender + "|" + receiver + "|" + message;
  126. Console.WriteLine(case6str);
  127. Communication.SendMessage(client, case6str);
  128. for (int i = 0; i < clients.Count; i++)
  129. {
  130. if (clients[i].username == receiver)
  131. Communication.SendMessage(clients[i].tcpClient, "7|" + sender + "|" + receiver + "|" + message);
  132. }
  133. }
  134. break;
  135. case "8": //alle online Patients sturen naar Doctorclient
  136. if (response[1] != null)
  137. {
  138. if (response[1] == "doctor" || true) //TODO: doctor check
  139. {
  140. List<string> patients = new List<string>();
  141. foreach (Client c in clients)
  142. {
  143. User user = users.FirstOrDefault(item => item.id == c.username);
  144. if (user != null)
  145. if (!user.isDoctor)
  146. patients.Add(user.id);
  147. }
  148. string strToSend = "8|";
  149. if (!(patients.Count > 0))
  150. strToSend += "-1";
  151. else
  152. foreach (string patient in patients)
  153. {
  154. strToSend += (patient + '\t');
  155. }
  156. Communication.SendMessage(client, strToSend.TrimEnd('\t'));
  157. }
  158. }
  159. break;
  160. case "9": //alles doorsturen voor de dokter
  161. //insert code to send list
  162. break;
  163. default:
  164. break;
  165. }
  166. }
  167. }
  168. }
  169. }