static void Main(string[] args) { Console.WriteLine("Hello Server!"); DoctorPasswordData.Init(); AllClients.Init(); Listener = new TcpListener(IPAddress.Any, 15243); Listener.Start(); Listener.BeginAcceptTcpClient(new AsyncCallback(OnConnect), null); Console.ReadLine(); while (true) { } }
private void HandleData(string[] packetData) { //Console.WriteLine($"Got a packet: {packetData[0]}"); switch (packetData[0]) { case "login": if (!AssertPacketData(packetData, 2)) { return; } this.UserName = packetData[1]; Console.WriteLine($"User {this.UserName} is connected"); if (DoctorPasswordData.DoctorPassWords.ContainsKey(this.UserName)) { Console.WriteLine("Username is in use by doctor"); Write("login\r\nerror\r\nThe username is in use"); return; } if (AllClients.TotalClients.ContainsKey(UserName)) { Client client; AllClients.TotalClients.TryGetValue(UserName, out client); if (client.IsOnline) { Write("login\r\nerror\r\nA user with the same name is already online"); } else { Client clientData; AllClients.TotalClients.TryGetValue(this.UserName, out clientData); this.ClientData = clientData.ClientData; AllClients.Remove(this.UserName); Write("login\r\nok"); AllClients.Add(UserName, this); } } else { foreach (Client client in AllClients.TotalClients.Values) { if (client.IsDoctor && client.IsOnline) { client.Write($"AddClient\r\n{UserName}"); } } Write("login\r\nok"); AllClients.Add(UserName, this); } break; case "data": if (!AssertPacketData(packetData, 8)) { return; } this.ClientData.AddData(packetData[1], packetData[2], packetData[3], packetData[4], packetData[5], packetData[6], packetData[7]); Write("data\r\nData Recieved"); this.ClientData.PrintData(); //send real time data to all connected doctors foreach (Client client in AllClients.TotalClients.Values) { if (client.IsDoctor && client.IsOnline) { Console.WriteLine("Data size: " + this.ClientData.Data.Count); string recentDataJson = JsonConvert.SerializeObject(this.ClientData.Data); Console.WriteLine("Sending realtime: " + recentDataJson); client.Write($"RealTimeData\r\n{this.UserName}\r\n{recentDataJson}"); } } break; case "DoctorLogin": Console.WriteLine("DoctorLogin received"); if (!AssertPacketData(packetData, 3)) { return; } string username = packetData[1]; string password = packetData[2]; //check password Dictionary <string, string> passwords = DoctorPasswordData.DoctorPassWords; string dictionaryPassword; if (AllClients.TotalClients.ContainsKey(username)) { Client client; AllClients.TotalClients.TryGetValue(username, out client); if (client.IsOnline) { Write("DoctorLogin\r\nerror\r\nYou are already logged in somewhere else!"); return; } } if (passwords.ContainsKey(username)) { passwords.TryGetValue(username, out dictionaryPassword); if (dictionaryPassword.Equals(password)) { this.UserName = username; Console.WriteLine("correct password"); this.IsDoctor = true; Write("DoctorLogin\r\nok"); if (AllClients.TotalClients.ContainsKey(username)) { AllClients.TotalClients.Remove(username); } AllClients.TotalClients.Add(username, this); this.IsOnline = true; } else { Console.WriteLine("incorrect password"); Write("DoctorLogin\r\nerror\r\nIncorrect password"); } } else { Console.WriteLine("incorrect username"); Write("DoctorLogin\r\nerror\r\nIncorrect username"); } break; case "GetHistoricData": //doctor wants historic data if (!AssertPacketData(packetData, 2) || !this.IsDoctor) { return; } string dataUsername = packetData[1]; Client userClient; bool gotValue = AllClients.TotalClients.TryGetValue(dataUsername, out userClient); if (!gotValue) { Write("GetHistoricData\r\nerror\r\nUsername not found"); } else { //We moeten de graph lijst pakken i.p.v. de getJson!!! string historicDataJson = JsonConvert.SerializeObject(userClient.ClientData.Graphs); Write($"GetHistoricData\r\n{dataUsername}\r\n{historicDataJson}"); } break; case "GetRealtimeData": if (!IsDoctor) { return; } break; case "StartTraining": //Server ontvangt dit en moet dit doorsturen naar bijbehorende Client if (!AssertPacketData(packetData, 2) || !this.IsDoctor) { return; } dataUsername = packetData[1]; gotValue = AllClients.TotalClients.TryGetValue(dataUsername, out userClient); if (!gotValue) { Write("StartTraining\r\nerror\r\nUsername not found"); } else { if (!userClient.IsOnline) { Write("StartTraining\r\nerror\r\nUser not online"); } else { userClient.Write("StartTraining"); Write("StartTraining\r\nok"); userClient.ClientData.StartGraph(); } } break; case "StopTraining": //Server ontvangt dit en moet dit doorsturen naar bijbehorende Client if (!AssertPacketData(packetData, 2) || !this.IsDoctor) { return; } dataUsername = packetData[1]; gotValue = AllClients.TotalClients.TryGetValue(dataUsername, out userClient); if (!gotValue) { Write("StopTraining\r\nerror\r\nUsername not found"); } else { if (!userClient.IsOnline) { Write("StopTraining\r\nerror\r\nUser not online"); } else { userClient.Write("StopTraining"); Write("StopTraining\r\nok"); userClient.ClientData.FinishGraph(); } } break; case "chatToAll": if (!AssertPacketData(packetData, 2)) { return; } if (this.IsDoctor) { string messageToAll = packetData[1]; foreach (Client client in AllClients.TotalClients.Values) { if (client.IsOnline) { client.Write($"chatToAll\r\nmessage\r\n[{this.UserName}]: {messageToAll}"); } } Write($"chatToAll\r\nok"); } else { Write($"chatToAll\r\nerror\r\nOnly doctors can chat to all"); } break; case "directMessage": if (!AssertPacketData(packetData, 3)) { return; } string messageTo = packetData[1]; string message = packetData[2]; Client messageToClient; gotValue = AllClients.TotalClients.TryGetValue(messageTo, out messageToClient); if (gotValue) { if (this.IsDoctor || messageToClient.IsDoctor) { if (messageToClient.IsOnline) { messageToClient.Write($"directMessage\r\nmessage\r\n({this.UserName}): {message}"); Write($"directMessage\r\nok"); } else { Write($"directMessage\r\nerror\r\nTarget client is not online"); } } } else { Write($"directMessage\r\nerror\r\nNeither client is a doctor"); } break; case "GetClients": if (!IsDoctor || !AssertPacketData(packetData, 1)) { return; } string allUsernames = ""; int userAmount = 0; foreach (Client client in AllClients.TotalClients.Values) { if (!client.IsDoctor) { allUsernames += "\r\n" + client.UserName; userAmount++; } } message = $"GetClients\r\nok\r\n{userAmount}{allUsernames}"; Write(message); break; case "SetResistance": if (!AssertPacketData(packetData, 3)) { return; } Client clientResistance; AllClients.TotalClients.TryGetValue(packetData[1], out clientResistance); if (clientResistance == null) { Write("SetResistance\r\nerror\r\nDid not find user"); } else { clientResistance.Write($"SetResistance\r\n{packetData[2]}"); } break; default: Console.WriteLine("Did not understand: " + packetData[0]); break; } }