From 2319c863203d4a5720257f8e1eb0ec358d3f685b Mon Sep 17 00:00:00 2001 From: Kenneth van Ewijk Date: Mon, 19 Oct 2015 22:26:32 +0200 Subject: [PATCH] Moved Filehandler, better error handling --- ErgometerLibrary/ErgometerLibrary.csproj | 1 - ErgometerLibrary/FileHandler.cs | 150 ----------------------- ErgometerLibrary/NetCommand.cs | 23 ++-- ErgometerLibrary/NetHelper.cs | 26 ++-- 4 files changed, 33 insertions(+), 167 deletions(-) delete mode 100644 ErgometerLibrary/FileHandler.cs diff --git a/ErgometerLibrary/ErgometerLibrary.csproj b/ErgometerLibrary/ErgometerLibrary.csproj index a1c062a..ec808c5 100644 --- a/ErgometerLibrary/ErgometerLibrary.csproj +++ b/ErgometerLibrary/ErgometerLibrary.csproj @@ -53,7 +53,6 @@ - diff --git a/ErgometerLibrary/FileHandler.cs b/ErgometerLibrary/FileHandler.cs deleted file mode 100644 index 65b9f08..0000000 --- a/ErgometerLibrary/FileHandler.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace ErgometerLibrary -{ - public class FileHandler - { - public static string DataFolder { get; } = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "Ergometer"); - public static string UsersFile { get; } = Path.Combine(DataFolder, "users.ergo"); - - public static void CheckStorage() - { - if(! Directory.Exists(DataFolder)) - { - Directory.CreateDirectory(DataFolder); - } - - if(! File.Exists(UsersFile)) - { - using (Stream stream = File.Open(UsersFile, FileMode.Create)) - { - BinaryWriter writer = new BinaryWriter(stream); - writer.Write(1); - writer.Write("Doctor0tVfW"); - writer.Write("password"); - } - } - } - - //SESSION - public static int GenerateSession() - { - string[] existingSessions = Directory.GetDirectories(DataFolder); - - Random rand = new Random(); - int sessionID = rand.Next(0, int.MaxValue); - - - while (existingSessions.Contains(sessionID.ToString())) - { - sessionID = rand.Next(int.MinValue, int.MaxValue); - } - - return sessionID; - } - - public static void CreateSession(int session, string naam) - { - Directory.CreateDirectory(GetSessionFolder(session)); - - using (File.Create(Path.Combine(GetSessionFile(session)))) ; - using (File.Create(Path.Combine(GetSessionMetingen(session)))) ; - using (File.Create(Path.Combine(GetSessionChat(session)))) ; - - File.WriteAllText(GetSessionFile(session), naam + Environment.NewLine + Helper.Now); - Console.WriteLine("Created session at " + Helper.MillisecondsToTime(Helper.Now)); - } - - public static void WriteMetingen(int session, List metingen) - { - string json = Newtonsoft.Json.JsonConvert.SerializeObject(metingen); - File.WriteAllText(GetSessionMetingen(session), json); - Console.WriteLine("Writing metingen: " + GetSessionMetingen(session)); - } - - public static List ReadMetingen(int session) - { - object metingString = Newtonsoft.Json.JsonConvert.DeserializeObject(GetSessionMetingen(session)); - Console.WriteLine("Reading metingen: " + GetSessionMetingen(session)); - return (List) metingString; - } - - public static int[] GetAllSessions() - { - string[] directories = Directory.GetDirectories(DataFolder); - int[] sessions = new int[directories.Length]; - for (int i = 0; i < directories.Length; i++) - { - sessions[i] = int.Parse(directories[i]); - } - return sessions; - } - - public static void WriteChat(int session, List chat) - { - string write = ""; - foreach(ChatMessage c in chat) - { - write += c.ToString() + "\n"; - } - - File.WriteAllText(GetSessionChat(session), write); - Console.WriteLine("Writing chat: " + GetSessionChat(session)); - } - - private static string GetSessionFolder(int session) - { - return Path.Combine(DataFolder, session.ToString()); - } - private static string GetSessionFile(int session) - { - return Path.Combine(DataFolder, session.ToString(), "session.prop"); - } - private static string GetSessionMetingen(int session) - { - return Path.Combine(DataFolder, session.ToString(), "metingen.ergo"); - } - private static string GetSessionChat(int session) - { - return Path.Combine(DataFolder, session.ToString(), "chat.log"); - } - - //USER MANAGEMENT - public static Dictionary LoadUsers() - { - Dictionary users = new Dictionary(); - - using (Stream stream = File.Open(UsersFile, FileMode.Open)) - { - BinaryReader reader = new BinaryReader(stream); - int count = reader.ReadInt32(); - for (int n = 0; n < count; n++) - { - var key = reader.ReadString(); - var value = reader.ReadString(); - users.Add(key, value); - } - } - - return users; - } - - public static void SaveUsers(Dictionary users) - { - using(Stream stream = File.Open(UsersFile, FileMode.Open)) - { - BinaryWriter writer = new BinaryWriter(stream); - writer.Write(users.Count); - foreach (var kvp in users) - { - writer.Write(kvp.Key); - writer.Write(kvp.Value); - } - writer.Flush(); - } - } - } -} diff --git a/ErgometerLibrary/NetCommand.cs b/ErgometerLibrary/NetCommand.cs index 6b1d5e6..d7b5c36 100644 --- a/ErgometerLibrary/NetCommand.cs +++ b/ErgometerLibrary/NetCommand.cs @@ -8,11 +8,11 @@ namespace ErgometerLibrary { public class NetCommand { - public enum CommandType { LOGIN, DATA, CHAT, LOGOUT, SESSION, VALUESET, USER, RESPONSE, REQUEST, LENGTH, SESSIONDATA } + public enum CommandType { LOGIN, DATA, CHAT, LOGOUT, SESSION, VALUESET, USER, RESPONSE, REQUEST, LENGTH, SESSIONDATA, ERROR } public enum RequestType { USERS, ALLSESSIONS, CURRENTSESSIONS, OLDDATA, SESSIONDATA } public enum ResponseType { LOGINOK, LOGINWRONG, ERROR, NOTLOGGEDIN } public enum ValueType { TIME, POWER, ENERGY, DISTANCE } - public enum LengthType { USERS, SESSIONS, SESSIONDATA, DATA, CURRENTSESSIONS} + public enum LengthType { USERS, SESSIONS, SESSIONDATA, DATA, CURRENTSESSIONS } public double Timestamp { get; set; } public int Session { get; set; } @@ -28,7 +28,7 @@ namespace ErgometerLibrary public string ChatMessage { get; set; } public Meting Meting { get; set; } public int LengthValue { get; set; } - + //SESSION public NetCommand(int session) { @@ -135,16 +135,23 @@ namespace ErgometerLibrary { string[] com = command.Split('»'); - Console.WriteLine(command); + int comType = 0; + try + { + comType = int.Parse(com[0]); + } + catch(Exception e) + { + return new NetCommand(CommandType.ERROR, 0); + } - int comType = int.Parse(com[0]); int session = 0; if (com[1].StartsWith("ses")) session = int.Parse(com[1].Substring(3)); else throw new FormatException("Error in NetCommand: " + com[1] + " is not a valid session."); - string[] args = new string[com.Length-2]; + string[] args = new string[com.Length - 2]; for (int i = 2; i < com.Length; i++) { args[i - 2] = com[i]; @@ -268,7 +275,7 @@ namespace ErgometerLibrary if (args.Length != 1) throw new MissingFieldException("Error in NetCommand: Response is missing arguments"); - switch(args[0]) + switch (args[0]) { case "loginok": return new NetCommand(ResponseType.LOGINOK, session); @@ -344,7 +351,7 @@ namespace ErgometerLibrary switch (Type) { case CommandType.LOGIN: - command += "1»ses" + Session + "»" + DisplayName + "»" + Helper.Base64Encode(Password) + "»" + IsDoctor; + command += "1»ses" + Session + "»" + DisplayName + "»" + Helper.Base64Encode(Password) + "»" + IsDoctor; break; case CommandType.DATA: command += "2»ses" + Session + "»" + Meting.ToCommand(); diff --git a/ErgometerLibrary/NetHelper.cs b/ErgometerLibrary/NetHelper.cs index 4c5a26b..ac944b8 100644 --- a/ErgometerLibrary/NetHelper.cs +++ b/ErgometerLibrary/NetHelper.cs @@ -29,10 +29,15 @@ namespace ErgometerLibrary if (client.Connected) { - StreamWriter wr = new StreamWriter(client.GetStream(), Encoding.Unicode); - wr.WriteLine(command); - Console.WriteLine("sent " + command); - wr.Flush(); + try { + StreamWriter wr = new StreamWriter(client.GetStream(), Encoding.Unicode); + wr.WriteLine(command); + wr.Flush(); + } + catch(Exception e) + { + return; + } } } @@ -61,10 +66,15 @@ namespace ErgometerLibrary */ if (client.Connected) { - StreamReader rd = new StreamReader(client.GetStream(), Encoding.Unicode); - string str = rd.ReadLine(); - Console.WriteLine("rec " + str); - return str; + try { + StreamReader rd = new StreamReader(client.GetStream(), Encoding.Unicode); + string str = rd.ReadLine(); + return str; + } + catch(Exception e) + { + return ""; + } } else return "";