Selaa lähdekoodia

Merge branch 'feature/Server_brdk.nl'

Conflicts:
	Proftaak Remote Healthcare/Server/Client.cs
Bart Reedijk 10 vuotta sitten
vanhempi
commit
46db98d678

+ 16 - 3
Proftaak Remote Healthcare/Server/Client.cs

@@ -36,7 +36,14 @@ namespace Server
             while (!(client.Client.Poll(0, SelectMode.SelectRead) && client.Client.Available == 0))
             {
                 byte[] bytesFrom = new byte[(int)client.ReceiveBufferSize];
-                networkStream.Read(bytesFrom, 0, (int)client.ReceiveBufferSize);
+                try
+                {
+                    networkStream.Read(bytesFrom, 0, (int)client.ReceiveBufferSize);
+                } catch (Exception)
+                {
+                    Stop();
+                }
+                
                 String response = Encoding.ASCII.GetString(bytesFrom);
                 String[] response_parts = response.Split('|');
                 if (response_parts.Length > 0)
@@ -102,11 +109,14 @@ namespace Server
                             //controleren of het bericht wel tekens bevat
                             if (response_parts[3] != null)
                             {
-                                String message = response_parts[3];
+                                String message = response_parts[3].TrimEnd('\0');
                                 String receiver = response_parts[2];
                                 String sender = response_parts[1];
 
-                                sendString("7|" + sender + "|" + receiver + "|" + message);
+                                string case6str = "7|" + sender + "|" + receiver + "|" + message;
+                                Console.WriteLine(case6str);
+                                sendString(case6str);
+
                                 foreach (var client in Program.Clients)
                                 {
                                     if (client.username == receiver)
@@ -135,6 +145,9 @@ namespace Server
                                 }
                             }
                             break;
+                        default:
+                            break;
+
                     }
                 }
             }

+ 174 - 0
Proftaak Remote Healthcare/Server/Client.cs.orig

@@ -0,0 +1,174 @@
+using System;
+using System.Linq;
+using System.Text;
+using System.Net.Sockets;
+using System.Threading;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using Server.JSONObjecten;
+using JsonConverter = Server.FileIO.JsonConverter;
+using System.Collections.Generic;
+
+namespace Server
+{
+    public class Client
+    {
+        TcpClient client;
+        NetworkStream networkStream;
+        private readonly AppGlobal _global;
+        public int iduser { get; private set; }
+        public string username { get; private set; }
+        private Thread _workerThread;
+
+        public Client(TcpClient socket)
+        {
+            client = socket;
+            networkStream = client.GetStream();
+            _global = AppGlobal.Instance;
+            iduser = -1;
+            Console.WriteLine("New client connected");
+            _workerThread = new Thread(recieve);
+            _workerThread.Start();
+        }
+
+        public void recieve()
+        {
+            while (!(client.Client.Poll(0, SelectMode.SelectRead) && client.Client.Available == 0))
+            {
+                byte[] bytesFrom = new byte[(int)client.ReceiveBufferSize];
+                try
+                {
+                    networkStream.Read(bytesFrom, 0, (int)client.ReceiveBufferSize);
+                } catch (Exception)
+                {
+                    Stop();
+                }
+                
+                String response = Encoding.ASCII.GetString(bytesFrom);
+                String[] response_parts = response.Split('|');
+                if (response_parts.Length > 0)
+                {
+                    User currentUser = null;
+                    switch (response_parts[0])
+                    {
+                        case "0":   //login
+                            if (response_parts.Length == 4)
+                            {
+                                int admin, id;
+                                _global.CheckLogin(response_parts[1], response_parts[2], out admin, out id);
+                                if (id > -1)
+                                {
+                                    this.username = response_parts[1];
+                                    this.iduser = id;
+                                    if (_global.GetUsers().First(item => item.id == response_parts[1]).isDoctor)
+                                    {
+                                        sendString("0|1|1|");   // Doctor
+                                    }
+                                    else
+                                    {
+                                        sendString("0|1|0|");   //Patient
+                                    }  
+                                }
+                                else
+                                {
+                                    sendString("0|0|0|");
+                                }
+                            }
+                            break;
+                        case "1":   //meetsessies ophalen
+
+                            currentUser = _global.GetUsers().First(item => item.id == response_parts[1]);
+                            sendString("1|" + JsonConverter.GetUserSessions(currentUser));
+                            break;
+                        case "2":   //Livedata opvragen
+
+                            currentUser = _global.GetUsers().First(item => item.id == response_parts[1]);
+
+                            JsonConverter.GetLastMeasurement(currentUser.tests.Last());
+                            break;
+                        case "3":   //Nieuwe meetsessie aanmaken
+                            if (response_parts.Length == 6 && iduser != -1)
+                            {
+                                _global.AddSession(response_parts[1], int.Parse(response_parts[2]), response_parts[3]);
+                            }
+                            break;
+                        case "4":   //Check nieuwe meetsessie
+
+
+
+                            break;
+                        case "5":   //data pushen naar meetsessie
+
+                            currentUser = _global.GetUsers().First(item => item.id == response_parts[1]);
+                            currentUser.tests.Last().AddMeasurement(JsonConvert.DeserializeObject<Measurement>(response_parts[2]));
+
+                            break;
+
+                        case "6": //chatberichten ontvangen van gebruikers
+
+                            //controleren of het bericht wel tekens bevat
+                            if (response_parts[3] != null)
+                            {
+                                String message = response_parts[3].TrimEnd('\0');
+                                String receiver = response_parts[2];
+                                String sender = response_parts[1];
+
+<<<<<<< HEAD
+                                sendString("7|" + sender + "|" + receiver + "|" + message);
+                                foreach (var client in Program.Clients)
+                                {
+                                    if (client.username == receiver)
+                                        client.sendString("7|" + sender + "|" + receiver + "|" + message);
+                                }
+=======
+                                //bericht doorsturen naar alle actieve gebruikers (de Fietsclient zorgt ervoor dat alleen de geadresseerde het bericht kan zien)
+                                string case6str = "7|" + sender + "|" + receiver + "|" + message;
+                                Console.WriteLine(case6str);
+                                sendString(case6str);
+>>>>>>> feature/Server_brdk.nl
+                            }
+                            break;
+                        case "8": //alle online Patients sturen naar Doctorclient
+                            if (response_parts[1] != null)
+                            {
+                                if (response_parts[1] == "doctor" || true) //TODO: doctor check
+                                {
+                                    string strToSend = "8|";
+                                    List<string> activePatients = _global.GetActivePatients();
+                                    if (!(activePatients.Count > 0))
+                                    {
+                                        strToSend += "-1";
+                                    } else
+                                    {
+                                        foreach (string patient in _global.GetActivePatients())
+                                        {
+                                            strToSend += (patient + '\t');
+                                        }
+                                    }
+                                    sendString(strToSend.TrimEnd('\t'));
+                                }
+                            }
+                            break;
+                        default:
+                            break;
+
+                    }
+                }
+            }
+            Stop();
+        }
+
+        private void Stop()
+        {
+            Program.RemoveClientFromList(this);
+            _workerThread.Abort();
+        }
+
+        public void sendString(string s)
+        {
+            byte[] b = Encoding.ASCII.GetBytes(s);
+            networkStream.Write(b, 0, b.Length);
+            networkStream.Flush();
+        }
+    }
+}