From acf62eaaed6c5711570a83d8c1a4e5e706b4abe5 Mon Sep 17 00:00:00 2001 From: Kenneth van Ewijk Date: Tue, 13 Oct 2015 22:04:49 +0200 Subject: [PATCH] Send length before data --- ErgometerServer/ClientThread.cs | 2 +- ErgometerServer/DoctorThread.cs | 20 ++++++++++++++++---- ErgometerServer/ErgometerServer.csproj | 2 +- ErgometerServer/Server.cs | 17 ++++++++++++++--- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/ErgometerServer/ClientThread.cs b/ErgometerServer/ClientThread.cs index 88d79bf..cb43f8c 100644 --- a/ErgometerServer/ClientThread.cs +++ b/ErgometerServer/ClientThread.cs @@ -15,7 +15,7 @@ namespace ErgometerServer TcpClient client; Server server; - string name; + public string name; public int session { get; } bool running; diff --git a/ErgometerServer/DoctorThread.cs b/ErgometerServer/DoctorThread.cs index b001f67..2dc6a40 100644 --- a/ErgometerServer/DoctorThread.cs +++ b/ErgometerServer/DoctorThread.cs @@ -37,7 +37,7 @@ namespace ErgometerServer // - Oude data opsturen (metingen) (not tested yet) // - Oude sessies bekijken (lijst met sessies) (not tested yet) // - Users opvragen (not tested yet) - // - Gegevens van huidige sessie krijgen (gebruikersnaam enz) + // - Gegevens van huidige sessie krijgen (gebruikersnaam enz) (not tested yet) // - Huidige sessies (not tested yet) // - case NetCommand.CommandType.LOGOUT: @@ -52,16 +52,21 @@ namespace ErgometerServer server.SendToClient(input); break; case NetCommand.CommandType.USER: - server.AddUser(input.users); + server.AddUser(input.DisplayName, input.Password); break; case NetCommand.CommandType.REQUEST: switch (input.Request) { case NetCommand.RequestType.USERS: - sendToDoctor(new NetCommand(FileHandler.LoadUsers(), input.Session)); + sendToDoctor(new NetCommand(NetCommand.LengthType.USERS, server.users.Count, input.Session)); + foreach (KeyValuePair user in server.users) + { + sendToDoctor(new NetCommand(user.Key, user.Value, input.Session)); + } break; case NetCommand.RequestType.OLDDATA: List metingen = FileHandler.ReadMetingen(input.Session); + sendToDoctor(new NetCommand(NetCommand.LengthType.DATA, metingen.Count, input.Session)); foreach (Meting meting in metingen) { sendToDoctor(new NetCommand(meting, input.Session)); @@ -69,6 +74,7 @@ namespace ErgometerServer break; case NetCommand.RequestType.ALLSESSIONS: int[] sessions = FileHandler.GetAllSessions(); + sendToDoctor(new NetCommand(NetCommand.LengthType.SESSIONS, sessions.Length, input.Session)); for (int i = 0; i < sessions.Length; i++) { sendToDoctor(new NetCommand(NetCommand.CommandType.SESSION, sessions[i])); @@ -76,13 +82,19 @@ namespace ErgometerServer break; case NetCommand.RequestType.CURRENTSESSIONS: List currentsessions = server.GetRunningSessions(); + sendToDoctor(new NetCommand(NetCommand.LengthType.CURRENTSESSIONS, currentsessions.Count, input.Session)); foreach (int session in currentsessions) { sendToDoctor(new NetCommand(NetCommand.CommandType.SESSION, session)); } break; case NetCommand.RequestType.SESSIONDATA: - //sendToDoctor(new NetCommand()); + List> currentsessionsdata = server.GetRunningSessionsData(); + sendToDoctor(new NetCommand(NetCommand.LengthType.SESSIONDATA, currentsessionsdata.Count, input.Session)); + foreach (Tuple ses in currentsessionsdata) + { + sendToDoctor(new NetCommand(ses.Item2, false, ses.Item1)); + } break; default: throw new FormatException("Unknown Command"); diff --git a/ErgometerServer/ErgometerServer.csproj b/ErgometerServer/ErgometerServer.csproj index 64a1f94..03ff5a0 100644 --- a/ErgometerServer/ErgometerServer.csproj +++ b/ErgometerServer/ErgometerServer.csproj @@ -33,7 +33,7 @@ 4 - + False ..\..\..\ErgometerLibrary\ErgometerLibrary\ErgometerLibrary\bin\Debug\ErgometerLibrary.dll diff --git a/ErgometerServer/Server.cs b/ErgometerServer/Server.cs index 35b89c2..9609e71 100644 --- a/ErgometerServer/Server.cs +++ b/ErgometerServer/Server.cs @@ -19,7 +19,7 @@ namespace ErgometerServer public List clients { get; } private DoctorThread doctor; - private static Dictionary users; + public Dictionary users; public Server() { @@ -28,6 +28,7 @@ namespace ErgometerServer FileHandler.CheckStorage(); users = FileHandler.LoadUsers(); + clients = new List(); TcpListener listener = new TcpListener(NetHelper.GetIP("127.0.0.1"), 8888); @@ -108,7 +109,7 @@ namespace ErgometerServer } } - private void AddUser(string name, string password) + public void AddUser(string name, string password) { users.Add(name, password); FileHandler.SaveUsers(users); @@ -144,7 +145,17 @@ namespace ErgometerServer sessions.Add(thread.session); } return sessions; - } + } + + public List> GetRunningSessionsData() + { + List> sessions = new List>(); + foreach (ClientThread thread in clients) + { + sessions.Add(new Tuple(thread.session, thread.name)); + } + return sessions; + } private string GeneratePassword(int len = 8) {