From b184187e215ed64cd716ad2a91391a4d15aec84e Mon Sep 17 00:00:00 2001 From: Philip Schell Date: Thu, 14 Feb 2019 11:43:34 +0100 Subject: [PATCH] Move Utils to Subfolder --- Utils.sln | 20 + CmdArgs.cs => Utils/CmdArgs.cs | 370 ++++++------ .../EventArgsHelper.cs | 68 +-- FileLogger.cs => Utils/FileLogger.cs | 134 ++--- FileMutex.cs => Utils/FileMutex.cs | 142 ++--- Helper.cs => Utils/Helper.cs | 196 +++---- InIReader.cs => Utils/InIReader.cs | 552 +++++++++--------- OwnController.cs => Utils/OwnController.cs | 44 +- OwnModel.cs => Utils/OwnModel.cs | 80 +-- OwnObject.cs => Utils/OwnObject.cs | 220 +++---- OwnView.cs => Utils/OwnView.cs | 48 +- ProgramLogger.cs => Utils/ProgramLogger.cs | 340 +++++------ .../Properties}/AssemblyInfo.cs | 80 +-- Updater.cs => Utils/Updater.cs | 384 ++++++------ Utils.csproj => Utils/Utils.csproj | 130 ++--- 15 files changed, 1414 insertions(+), 1394 deletions(-) create mode 100644 Utils.sln rename CmdArgs.cs => Utils/CmdArgs.cs (96%) rename EventArgsHelper.cs => Utils/EventArgsHelper.cs (96%) rename FileLogger.cs => Utils/FileLogger.cs (96%) rename FileMutex.cs => Utils/FileMutex.cs (95%) rename Helper.cs => Utils/Helper.cs (96%) rename InIReader.cs => Utils/InIReader.cs (96%) rename OwnController.cs => Utils/OwnController.cs (95%) rename OwnModel.cs => Utils/OwnModel.cs (95%) rename OwnObject.cs => Utils/OwnObject.cs (97%) rename OwnView.cs => Utils/OwnView.cs (95%) rename ProgramLogger.cs => Utils/ProgramLogger.cs (97%) rename {Properties => Utils/Properties}/AssemblyInfo.cs (97%) rename Updater.cs => Utils/Updater.cs (97%) rename Utils.csproj => Utils/Utils.csproj (97%) diff --git a/Utils.sln b/Utils.sln new file mode 100644 index 0000000..012783f --- /dev/null +++ b/Utils.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "Utils\Utils.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/CmdArgs.cs b/Utils/CmdArgs.cs similarity index 96% rename from CmdArgs.cs rename to Utils/CmdArgs.cs index 0468147..ffb1b97 100644 --- a/CmdArgs.cs +++ b/Utils/CmdArgs.cs @@ -1,185 +1,185 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace BlubbFish.Utils -{ - public class CmdArgs - { - public enum ArgLength - { - Single, - Touple - } - #region Classes - public struct VaildArguments - { - public VaildArguments(ArgLength length, Boolean required) - { - this.Required = required; - this.Length = length; - } - public VaildArguments(ArgLength length) - { - this.Required = false; - this.Length = length; - } - - public ArgLength Length { get; private set; } - public Boolean Required { get; private set; } - } - private struct ArgTouple - { - public ArgTouple(String type, String data) - { - this.Type = type; - this.Data = data; - } - public ArgTouple(String type) - { - this.Type = type; - this.Data = null; - } - public String Type { get; private set; } - public String Data { get; private set; } - - internal void SetData(String data) - { - if (data != "") { - this.Data = data; - } - } - } - #endregion - private String[] args; - private List argList; - private Dictionary argsPosible = new Dictionary(); - private static CmdArgs instances = null; - private Boolean isSetArguments = false; - - private CmdArgs() - { - } - - /// - /// Gibt eine Instanz der Klasse zurück - /// - /// Klasse - public static CmdArgs Instance - { - get { - if (instances == null) { - instances = new CmdArgs(); - } - return instances; - } - } - - /// - /// Übernimmt die Argumente für die Klasse - /// - /// Mögliche Komandozeilenargumente - /// Tatsächliche Komandozeilenargumente - public void SetArguments(Dictionary arguments, String[] args) - { - this.args = args; - if (!this.isSetArguments) { - this.isSetArguments = true; - this.argsPosible = arguments; - this.Init(); - } - } - - private void Init() - { - this.argList = new List(); - for (Int32 i = 0; i < this.args.Length; i++) { - if (this.argsPosible.Keys.Contains(this.args[i])) { - ArgTouple arg = new ArgTouple(this.args[i]); - if (this.argsPosible[this.args[i]].Length == ArgLength.Touple) { - if (this.args.Length > i + 1) { - arg.SetData(this.args[++i]); - } else { - Console.WriteLine(this.GetUsageList("")); - throw new ArgumentException("Argument: "+this.args[i]+" missing second argument."); - } - } - this.argList.Add(arg); - } - } - } - - /// - /// Menge der angegebenen Komandozeilen-Argumente - /// - /// Menge - public Int32 GetArgsLength() - { - return this.argList.Count; - } - - /// - /// Gibt zurück ob ein Argument angegeben wurde - /// - /// Name des Arguments - /// true wenn angegeben - public Boolean HasArgumentType(String name) - { - foreach (ArgTouple t in this.argList) { - if (t.Type == name) { - return true; - } - } - return false; - } - - /// - /// Gibt den Inhalt des angegeben Arguments zurück, nur bei zweiteiligen Argumenten möglich - /// - /// Name des Arguments - /// Inhalt des Arguments oder ArgumentNullException - public String GetArgumentData(String name) - { - foreach (ArgTouple t in this.argList) { - if (t.Type == name && t.Data != null) { - return t.Data; - } - } - throw new ArgumentNullException(); - } - - public Boolean HasAllRequiredArguments() - { - foreach (KeyValuePair item in this.argsPosible) { - if (item.Value.Required && !this.HasArgumentType(item.Key)) { - return false; - } - } - return true; - } - - public String GetUsageList(String name) - { - String ret = "Usage: " + name + " Parameter\nParameter:\n"; - String req = ""; - String opt = ""; - foreach (KeyValuePair item in this.argsPosible) { - if (item.Value.Required) { - req += item.Key + " " + ((item.Value.Length == ArgLength.Touple) ? " [data]\n" : "\n"); - } - } - if (req != "") { - ret += "Benötigte Parameter:\n" + req; - } - foreach (KeyValuePair item in this.argsPosible) { - if (!item.Value.Required) { - opt += item.Key + " " + ((item.Value.Length == ArgLength.Touple) ? " [data]\n" : "\n"); - } - } - if (opt != "") { - ret += "Optionale Parameter:\n" + opt; - } - return ret; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; + +namespace BlubbFish.Utils +{ + public class CmdArgs + { + public enum ArgLength + { + Single, + Touple + } + #region Classes + public struct VaildArguments + { + public VaildArguments(ArgLength length, Boolean required) + { + this.Required = required; + this.Length = length; + } + public VaildArguments(ArgLength length) + { + this.Required = false; + this.Length = length; + } + + public ArgLength Length { get; private set; } + public Boolean Required { get; private set; } + } + private struct ArgTouple + { + public ArgTouple(String type, String data) + { + this.Type = type; + this.Data = data; + } + public ArgTouple(String type) + { + this.Type = type; + this.Data = null; + } + public String Type { get; private set; } + public String Data { get; private set; } + + internal void SetData(String data) + { + if (data != "") { + this.Data = data; + } + } + } + #endregion + private String[] args; + private List argList; + private Dictionary argsPosible = new Dictionary(); + private static CmdArgs instances = null; + private Boolean isSetArguments = false; + + private CmdArgs() + { + } + + /// + /// Gibt eine Instanz der Klasse zurück + /// + /// Klasse + public static CmdArgs Instance + { + get { + if (instances == null) { + instances = new CmdArgs(); + } + return instances; + } + } + + /// + /// Übernimmt die Argumente für die Klasse + /// + /// Mögliche Komandozeilenargumente + /// Tatsächliche Komandozeilenargumente + public void SetArguments(Dictionary arguments, String[] args) + { + this.args = args; + if (!this.isSetArguments) { + this.isSetArguments = true; + this.argsPosible = arguments; + this.Init(); + } + } + + private void Init() + { + this.argList = new List(); + for (Int32 i = 0; i < this.args.Length; i++) { + if (this.argsPosible.Keys.Contains(this.args[i])) { + ArgTouple arg = new ArgTouple(this.args[i]); + if (this.argsPosible[this.args[i]].Length == ArgLength.Touple) { + if (this.args.Length > i + 1) { + arg.SetData(this.args[++i]); + } else { + Console.WriteLine(this.GetUsageList("")); + throw new ArgumentException("Argument: "+this.args[i]+" missing second argument."); + } + } + this.argList.Add(arg); + } + } + } + + /// + /// Menge der angegebenen Komandozeilen-Argumente + /// + /// Menge + public Int32 GetArgsLength() + { + return this.argList.Count; + } + + /// + /// Gibt zurück ob ein Argument angegeben wurde + /// + /// Name des Arguments + /// true wenn angegeben + public Boolean HasArgumentType(String name) + { + foreach (ArgTouple t in this.argList) { + if (t.Type == name) { + return true; + } + } + return false; + } + + /// + /// Gibt den Inhalt des angegeben Arguments zurück, nur bei zweiteiligen Argumenten möglich + /// + /// Name des Arguments + /// Inhalt des Arguments oder ArgumentNullException + public String GetArgumentData(String name) + { + foreach (ArgTouple t in this.argList) { + if (t.Type == name && t.Data != null) { + return t.Data; + } + } + throw new ArgumentNullException(); + } + + public Boolean HasAllRequiredArguments() + { + foreach (KeyValuePair item in this.argsPosible) { + if (item.Value.Required && !this.HasArgumentType(item.Key)) { + return false; + } + } + return true; + } + + public String GetUsageList(String name) + { + String ret = "Usage: " + name + " Parameter\nParameter:\n"; + String req = ""; + String opt = ""; + foreach (KeyValuePair item in this.argsPosible) { + if (item.Value.Required) { + req += item.Key + " " + ((item.Value.Length == ArgLength.Touple) ? " [data]\n" : "\n"); + } + } + if (req != "") { + ret += "Benötigte Parameter:\n" + req; + } + foreach (KeyValuePair item in this.argsPosible) { + if (!item.Value.Required) { + opt += item.Key + " " + ((item.Value.Length == ArgLength.Touple) ? " [data]\n" : "\n"); + } + } + if (opt != "") { + ret += "Optionale Parameter:\n" + opt; + } + return ret; + } + } +} diff --git a/EventArgsHelper.cs b/Utils/EventArgsHelper.cs similarity index 96% rename from EventArgsHelper.cs rename to Utils/EventArgsHelper.cs index 1dd9995..b87fd6f 100644 --- a/EventArgsHelper.cs +++ b/Utils/EventArgsHelper.cs @@ -1,34 +1,34 @@ -using System; - -namespace BlubbFish.Utils { - public class UpdaterEventArgs : EventArgs { - public UpdaterEventArgs(Boolean hasUpdates, String message) { - this.HasUpdates = hasUpdates; - this.Message = message; - } - public String Message { get; private set; } - public Boolean HasUpdates { get; private set; } - } - - public class UpdaterFailEventArgs : EventArgs { - public UpdaterFailEventArgs(Exception e) { - this.Except = e; - } - - public Exception Except { get; private set; } - } - - public class LogEventArgs : EventArgs { - public LogEventArgs(String location, String message, OwnObject.LogLevel level, DateTime date) { - this.Location = location; - this.Message = message; - this.Level = level; - this.Date = date; - } - - public String Location { get; private set; } - public String Message { get; private set; } - public OwnObject.LogLevel Level { get; private set; } - public DateTime Date { get; private set; } - } -} +using System; + +namespace BlubbFish.Utils { + public class UpdaterEventArgs : EventArgs { + public UpdaterEventArgs(Boolean hasUpdates, String message) { + this.HasUpdates = hasUpdates; + this.Message = message; + } + public String Message { get; private set; } + public Boolean HasUpdates { get; private set; } + } + + public class UpdaterFailEventArgs : EventArgs { + public UpdaterFailEventArgs(Exception e) { + this.Except = e; + } + + public Exception Except { get; private set; } + } + + public class LogEventArgs : EventArgs { + public LogEventArgs(String location, String message, OwnObject.LogLevel level, DateTime date) { + this.Location = location; + this.Message = message; + this.Level = level; + this.Date = date; + } + + public String Location { get; private set; } + public String Message { get; private set; } + public OwnObject.LogLevel Level { get; private set; } + public DateTime Date { get; private set; } + } +} diff --git a/FileLogger.cs b/Utils/FileLogger.cs similarity index 96% rename from FileLogger.cs rename to Utils/FileLogger.cs index 0a50ffe..3b04fca 100644 --- a/FileLogger.cs +++ b/Utils/FileLogger.cs @@ -1,67 +1,67 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.IO; -using System.Reflection; - -namespace BlubbFish.Utils -{ - public class FileLogger - { - private static Dictionary instances = new Dictionary(); - private static String logDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar; - private readonly StreamWriter file; - private FileLogger(String filename, Boolean append) - { - filename = logDir + filename; - if (!File.Exists(filename)) { - String folder = Path.GetDirectoryName(Path.GetFullPath(filename)); - if (!Directory.Exists(folder)) { - Directory.CreateDirectory(folder); - } - } - this.file = new StreamWriter(filename, append, Encoding.UTF8) { - AutoFlush = true - }; - } - public static FileLogger GetInstance(String filename, Boolean append) - { - if (!instances.Keys.Contains(filename)) { - instances.Add(filename, new FileLogger(filename, append)); - } - return instances[filename]; - } - - public static void SetLogDir(String v) - { - v = v.Replace("..", ""); - v = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar + v; - if (Directory.Exists(v)) { - logDir = v; - } else { - Directory.CreateDirectory(v); - logDir = v; - } - if (logDir.Substring(logDir.Length - 1) != Path.DirectorySeparatorChar.ToString()) { - logDir = logDir + Path.DirectorySeparatorChar; - } - } - - public void SetArray(String[] text) - { - this.file.Write(String.Join(this.file.NewLine, text) + this.file.NewLine); - this.file.Flush(); - } - - public void SetLine(String text) - { - this.file.WriteLine(text); - this.file.Flush(); - } - public void SetLine(String text, DateTime d) - { - this.SetLine(d.ToString("[yyyy-MM-dd HH:mm:ss.ffff] ") + text); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using System.Reflection; + +namespace BlubbFish.Utils +{ + public class FileLogger + { + private static Dictionary instances = new Dictionary(); + private static String logDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar; + private readonly StreamWriter file; + private FileLogger(String filename, Boolean append) + { + filename = logDir + filename; + if (!File.Exists(filename)) { + String folder = Path.GetDirectoryName(Path.GetFullPath(filename)); + if (!Directory.Exists(folder)) { + Directory.CreateDirectory(folder); + } + } + this.file = new StreamWriter(filename, append, Encoding.UTF8) { + AutoFlush = true + }; + } + public static FileLogger GetInstance(String filename, Boolean append) + { + if (!instances.Keys.Contains(filename)) { + instances.Add(filename, new FileLogger(filename, append)); + } + return instances[filename]; + } + + public static void SetLogDir(String v) + { + v = v.Replace("..", ""); + v = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar + v; + if (Directory.Exists(v)) { + logDir = v; + } else { + Directory.CreateDirectory(v); + logDir = v; + } + if (logDir.Substring(logDir.Length - 1) != Path.DirectorySeparatorChar.ToString()) { + logDir = logDir + Path.DirectorySeparatorChar; + } + } + + public void SetArray(String[] text) + { + this.file.Write(String.Join(this.file.NewLine, text) + this.file.NewLine); + this.file.Flush(); + } + + public void SetLine(String text) + { + this.file.WriteLine(text); + this.file.Flush(); + } + public void SetLine(String text, DateTime d) + { + this.SetLine(d.ToString("[yyyy-MM-dd HH:mm:ss.ffff] ") + text); + } + } +} diff --git a/FileMutex.cs b/Utils/FileMutex.cs similarity index 95% rename from FileMutex.cs rename to Utils/FileMutex.cs index f3b6bd4..567b753 100644 --- a/FileMutex.cs +++ b/Utils/FileMutex.cs @@ -1,71 +1,71 @@ -using System; -using System.IO; -using System.Security.Cryptography; -using System.Text; - -namespace BlubbFish.Utils -{ - public class FileMutex : IDisposable - { - private static FileMutex instance; - private String filename; - private StreamWriter file; - private FileMutex() { } - - public static FileMutex Instance - { - get { - if (instance == null) { - instance = new FileMutex(); - } - return instance; - } - } - - public void SetName(String name) - { - String path = AppDomain.CurrentDomain.BaseDirectory; - this.filename = path + String.Join(String.Empty, Array.ConvertAll(new SHA512Managed().ComputeHash(Encoding.UTF8.GetBytes(name)), b => b.ToString("X2"))) + ".lock.txt"; - } - - public Boolean Create() - { - if (File.Exists(this.filename)) { - return false; - } - - this.file = new StreamWriter(this.filename); - InitFile(); - return File.Exists(this.filename) && this.file != null; - } - - private void InitFile() - { - this.file.Write("Created: " + DateTime.Now.ToUniversalTime() + "\n"); - this.file.Flush(); - } - - public Boolean Delete() - { - if(this.file != null) { - this.file.Close(); - } - - File.Delete(this.filename); - return !File.Exists(this.filename); - } - - protected virtual void Dispose(Boolean disposing) { - if (disposing) { - if(this.file != null) { - this.file.Close(); - } - } - } - - public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - } -} +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace BlubbFish.Utils +{ + public class FileMutex : IDisposable + { + private static FileMutex instance; + private String filename; + private StreamWriter file; + private FileMutex() { } + + public static FileMutex Instance + { + get { + if (instance == null) { + instance = new FileMutex(); + } + return instance; + } + } + + public void SetName(String name) + { + String path = AppDomain.CurrentDomain.BaseDirectory; + this.filename = path + String.Join(String.Empty, Array.ConvertAll(new SHA512Managed().ComputeHash(Encoding.UTF8.GetBytes(name)), b => b.ToString("X2"))) + ".lock.txt"; + } + + public Boolean Create() + { + if (File.Exists(this.filename)) { + return false; + } + + this.file = new StreamWriter(this.filename); + InitFile(); + return File.Exists(this.filename) && this.file != null; + } + + private void InitFile() + { + this.file.Write("Created: " + DateTime.Now.ToUniversalTime() + "\n"); + this.file.Flush(); + } + + public Boolean Delete() + { + if(this.file != null) { + this.file.Close(); + } + + File.Delete(this.filename); + return !File.Exists(this.filename); + } + + protected virtual void Dispose(Boolean disposing) { + if (disposing) { + if(this.file != null) { + this.file.Close(); + } + } + } + + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + } +} diff --git a/Helper.cs b/Utils/Helper.cs similarity index 96% rename from Helper.cs rename to Utils/Helper.cs index b513754..01f14c4 100644 --- a/Helper.cs +++ b/Utils/Helper.cs @@ -1,98 +1,98 @@ -using System; -using System.ComponentModel; -using System.Reflection; - -namespace BlubbFish.Utils { - public static class Helper { - #region PropertyHelper - public static Boolean HasProperty(this Object o, String type) { - Type t = o.GetType(); - foreach (PropertyInfo item in t.GetProperties()) { - if (item.Name == type) { - return true; - } - } - return false; - } - - public static Object GetProperty(this Object o, String name) { - PropertyInfo prop = o.GetType().GetProperty(name); - if (prop.CanRead) { - return prop.GetValue(o); - } - return null; - } - - public static void SetProperty(this Object o, String name, String value) { - PropertyInfo prop = o.GetType().GetProperty(name); - if (prop.CanWrite) { - if (prop.PropertyType == typeof(Boolean) && Boolean.TryParse(value, out Boolean vb)) { - prop.SetValue(o, vb); - } else if (prop.PropertyType == typeof(Byte) && Byte.TryParse(value, out Byte v8)) { - prop.SetValue(o, v8); - } else if (prop.PropertyType == typeof(Int32) && Int32.TryParse(value, out Int32 v32)) { - prop.SetValue(o, v32); - } else if (prop.PropertyType == typeof(Single) && Single.TryParse(value, out Single vs)) { - prop.SetValue(o, vs); - } else if (prop.PropertyType == typeof(Double) && Double.TryParse(value, out Double vd)) { - prop.SetValue(o, vd); - } else if (prop.PropertyType == typeof(Int64) && Int64.TryParse(value, out Int64 v64)) { - prop.SetValue(o, v64); - } else if (prop.PropertyType.BaseType == typeof(Enum)) { - try { - prop.SetValue(o, Enum.Parse(prop.PropertyType, value)); - } catch (Exception) { } - } - } - } - #endregion - - #region InterfaceHelper - public static Boolean HasInterface(this Type o, Type interf) { - foreach (Type item in o.GetInterfaces()) { - if (item == interf) { - return true; - } - } - return false; - } - - public static Boolean HasAbstract(this Type o, Type type) { - if (o.BaseType == type) { - return true; - } - return false; - } - #endregion - - #region StringHelper - public static String GetEnumDescription(Enum value) { - FieldInfo fi = value.GetType().GetField(value.ToString()); - - DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); - - if (attributes != null && attributes.Length > 0) { - return attributes[0].Description; - } else { - return value.ToString(); - } - } - - public static String ToUpperLower(this String s) { - if (s.Length == 0) { - return ""; - } - if (s.Length == 1) { - return s.ToUpper(); - } - return s[0].ToString().ToUpper() + s.Substring(1).ToLower(); - } - - public static void WriteError(String text) { - Console.ForegroundColor = ConsoleColor.Red; - Console.Error.WriteLine("ERROR: " + text); - Console.ResetColor(); - } - #endregion - } -} +using System; +using System.ComponentModel; +using System.Reflection; + +namespace BlubbFish.Utils { + public static class Helper { + #region PropertyHelper + public static Boolean HasProperty(this Object o, String type) { + Type t = o.GetType(); + foreach (PropertyInfo item in t.GetProperties()) { + if (item.Name == type) { + return true; + } + } + return false; + } + + public static Object GetProperty(this Object o, String name) { + PropertyInfo prop = o.GetType().GetProperty(name); + if (prop.CanRead) { + return prop.GetValue(o); + } + return null; + } + + public static void SetProperty(this Object o, String name, String value) { + PropertyInfo prop = o.GetType().GetProperty(name); + if (prop.CanWrite) { + if (prop.PropertyType == typeof(Boolean) && Boolean.TryParse(value, out Boolean vb)) { + prop.SetValue(o, vb); + } else if (prop.PropertyType == typeof(Byte) && Byte.TryParse(value, out Byte v8)) { + prop.SetValue(o, v8); + } else if (prop.PropertyType == typeof(Int32) && Int32.TryParse(value, out Int32 v32)) { + prop.SetValue(o, v32); + } else if (prop.PropertyType == typeof(Single) && Single.TryParse(value, out Single vs)) { + prop.SetValue(o, vs); + } else if (prop.PropertyType == typeof(Double) && Double.TryParse(value, out Double vd)) { + prop.SetValue(o, vd); + } else if (prop.PropertyType == typeof(Int64) && Int64.TryParse(value, out Int64 v64)) { + prop.SetValue(o, v64); + } else if (prop.PropertyType.BaseType == typeof(Enum)) { + try { + prop.SetValue(o, Enum.Parse(prop.PropertyType, value)); + } catch (Exception) { } + } + } + } + #endregion + + #region InterfaceHelper + public static Boolean HasInterface(this Type o, Type interf) { + foreach (Type item in o.GetInterfaces()) { + if (item == interf) { + return true; + } + } + return false; + } + + public static Boolean HasAbstract(this Type o, Type type) { + if (o.BaseType == type) { + return true; + } + return false; + } + #endregion + + #region StringHelper + public static String GetEnumDescription(Enum value) { + FieldInfo fi = value.GetType().GetField(value.ToString()); + + DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); + + if (attributes != null && attributes.Length > 0) { + return attributes[0].Description; + } else { + return value.ToString(); + } + } + + public static String ToUpperLower(this String s) { + if (s.Length == 0) { + return ""; + } + if (s.Length == 1) { + return s.ToUpper(); + } + return s[0].ToString().ToUpper() + s.Substring(1).ToLower(); + } + + public static void WriteError(String text) { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine("ERROR: " + text); + Console.ResetColor(); + } + #endregion + } +} diff --git a/InIReader.cs b/Utils/InIReader.cs similarity index 96% rename from InIReader.cs rename to Utils/InIReader.cs index 738b944..d20f1f2 100644 --- a/InIReader.cs +++ b/Utils/InIReader.cs @@ -1,276 +1,276 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; - -namespace BlubbFish.Utils { - public class InIReader : IDisposable - { - private Dictionary> inifile; - private readonly FileSystemWatcher k; - private readonly String filename; - private static List search_path = new List() { - Directory.GetCurrentDirectory() - }; - - private static Dictionary instances = new Dictionary(); - - public static void SetSearchPath(List directorys) { - search_path.AddRange(directorys); - } - - public static Boolean ConfigExist(String filename) { - foreach (String path in search_path) { - if (File.Exists(path + Path.DirectorySeparatorChar + filename)) { - return true; - } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".ini")) { - return true; - } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".conf")) { - return true; - } - } - return false; - } - - private InIReader(String filename) - { - foreach (String path in search_path) { - if (File.Exists(path + Path.DirectorySeparatorChar + filename)) { - this.filename = path + Path.DirectorySeparatorChar + filename; - this.k = new FileSystemWatcher(path, filename); - break; - } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".ini")) { - this.filename = path + Path.DirectorySeparatorChar + filename + ".ini"; - this.k = new FileSystemWatcher(path, filename + ".ini"); - break; - } else if(File.Exists(path + Path.DirectorySeparatorChar + filename + ".conf")) { - this.filename = path + Path.DirectorySeparatorChar + filename + ".conf"; - this.k = new FileSystemWatcher(path, filename + ".conf"); - break; - } - } - if(this.filename == null) { - throw new ArgumentException(filename + " not found!"); - } - this.k.Changed += new FileSystemEventHandler(this.ReadAgain); - LoadFile(); - } - - /// - /// Gibt eine InIReader-Instanz zu einer Datei zurück - /// - /// Dateiname - /// - public static InIReader GetInstance(String filename) - { - if (!instances.Keys.Contains(filename)) { - instances.Add(filename, new InIReader(filename)); - } - return instances[filename]; - } - - private void ReadAgain(Object sender, EventArgs e) - { - this.LoadFile(); - } - - private void LoadFile() - { - this.inifile = new Dictionary>(); - StreamReader file = new StreamReader(this.filename); - List buf = new List(); - String fline = ""; - while (fline != null) { - fline = file.ReadLine(); - if (fline != null && fline.Length > 0 && fline.Substring(0, 1) != ";") { - buf.Add(fline); - } - } - file.Close(); - Dictionary sub = new Dictionary(); - String cap = ""; - foreach (String line in buf) { - Match match = Regex.Match(line, @"^\[[a-zA-ZäöüÄÖÜ0-9\-\._/ ]+\]\w*$", RegexOptions.IgnoreCase); - if (match.Success) { - if (sub.Count != 0 && cap != "") { - this.inifile.Add(cap, sub); - } - cap = line; - sub = new Dictionary(); - } else { - if (line != "" && cap != "") { - String key = line.Substring(0, line.IndexOf('=')); - String value = line.Substring(line.IndexOf('=') + 1); - sub.Add(key, value); - } - } - } - if (sub.Count != 0 && cap != "") { - this.inifile.Add(cap, sub); - } - } - - /// - /// Gibt eine Liste an Sektionen zurück - /// - /// Default = true; false, wenn die Liste ohne Klammern sein soll. - /// - public List GetSections(Boolean withBrackets = true) - { - if(withBrackets) { - return this.inifile.Keys.ToList(); - } else { - List ret = new List(); - foreach (String item in this.inifile.Keys) { - ret.Add(item.Substring(1, item.Length - 2)); - } - return ret; - } - } - - /// - /// Überschreibt eine InI-Datei mit der Kompletten neuen Configuration - /// - /// Neue Konfiguration - public void SetSections(Dictionary> config) { - this.inifile.Clear(); - foreach (KeyValuePair> item in config) { - String key = item.Key; - if(!key.StartsWith("[")) { - key = "[" + key + "]"; - } - if (Regex.Match(key, @"^\[[a-zA-ZäöüÄÖÜ0-9\-\._/ ]+\]\w*$", RegexOptions.IgnoreCase).Success) { - this.inifile.Add(key, item.Value); - } - } - this.Changed(); - } - - public Dictionary GetSection(String section) { - if(this.inifile.Keys.Contains(section)) { - return this.inifile[section]; - } - if(this.inifile.Keys.Contains("["+section+"]")) { - return this.inifile["[" + section + "]"]; - } - return new Dictionary(); - } - - /// - /// Gibt einen einzelnen Wert zurück - /// - /// Name der Sektion - /// Name des Wertes - /// - public String GetValue(String section, String key) - { - if (!section.StartsWith("[")) { - section = "[" + section + "]"; - } - if (this.inifile.Keys.Contains(section)) { - if (this.inifile[section].Keys.Contains(key)) { - return this.inifile[section][key]; - } - } - return null; - } - - /// - /// Setzt einen Wert in einer Sektion - /// - /// Name der Sektion - /// Name des Wertes - /// Wert - public void SetValue(String section, String key, String value) - { - if (!section.StartsWith("[")) { - section = "[" + section + "]"; - } - if (this.inifile.Keys.Contains(section)) { - if (this.inifile[section].Keys.Contains(key)) { - this.inifile[section][key] = value; - } else { - this.inifile[section].Add(key, value); - } - } else { - Dictionary sub = new Dictionary { - { key, value } - }; - this.inifile.Add(section, sub); - } - this.Changed(); - } - - private void Changed() - { - this.k.Changed -= null; - SaveSettings(); - LoadFile(); - this.k.Changed += new FileSystemEventHandler(this.ReadAgain); - } - - private void SaveSettings() - { - StreamWriter file = new StreamWriter(this.filename); - file.BaseStream.SetLength(0); - file.BaseStream.Flush(); - file.BaseStream.Seek(0, SeekOrigin.Begin); - foreach (KeyValuePair> cap in this.inifile) { - file.WriteLine(cap.Key); - foreach (KeyValuePair sub in cap.Value) { - file.WriteLine(sub.Key + "=" + sub.Value); - } - file.WriteLine(); - } - file.Flush(); - file.Close(); - } - - /// - /// Fügt eine neue Sektion in der Ini-Datei ein. - /// - /// Sektionsname - /// true if added, false if error - public Boolean AddSection(String name) - { - if (!name.StartsWith("[")) { - name = "[" + name + "]"; - } - if (this.inifile.Keys.Contains(name)) { - return false; - } - this.inifile.Add(name, new Dictionary()); - this.Changed(); - return true; - } - - /// - /// Löscht eine Sektion inklusive Unterpunkte aus der Ini-Datei. - /// - /// Sektionsname - /// true if removed, false if error - public Boolean RemoveSection(String name) - { - if (!name.StartsWith("[")) { - name = "[" + name + "]"; - } - if (!this.inifile.Keys.Contains(name)) { - return false; - } - this.inifile.Remove(name); - this.Changed(); - return false; - } - protected virtual void Dispose(Boolean disposing) { - if (disposing) { - this.k.Dispose(); - } - } - - public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - } -} +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; + +namespace BlubbFish.Utils { + public class InIReader : IDisposable + { + private Dictionary> inifile; + private readonly FileSystemWatcher k; + private readonly String filename; + private static List search_path = new List() { + Directory.GetCurrentDirectory() + }; + + private static Dictionary instances = new Dictionary(); + + public static void SetSearchPath(List directorys) { + search_path.AddRange(directorys); + } + + public static Boolean ConfigExist(String filename) { + foreach (String path in search_path) { + if (File.Exists(path + Path.DirectorySeparatorChar + filename)) { + return true; + } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".ini")) { + return true; + } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".conf")) { + return true; + } + } + return false; + } + + private InIReader(String filename) + { + foreach (String path in search_path) { + if (File.Exists(path + Path.DirectorySeparatorChar + filename)) { + this.filename = path + Path.DirectorySeparatorChar + filename; + this.k = new FileSystemWatcher(path, filename); + break; + } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".ini")) { + this.filename = path + Path.DirectorySeparatorChar + filename + ".ini"; + this.k = new FileSystemWatcher(path, filename + ".ini"); + break; + } else if(File.Exists(path + Path.DirectorySeparatorChar + filename + ".conf")) { + this.filename = path + Path.DirectorySeparatorChar + filename + ".conf"; + this.k = new FileSystemWatcher(path, filename + ".conf"); + break; + } + } + if(this.filename == null) { + throw new ArgumentException(filename + " not found!"); + } + this.k.Changed += new FileSystemEventHandler(this.ReadAgain); + LoadFile(); + } + + /// + /// Gibt eine InIReader-Instanz zu einer Datei zurück + /// + /// Dateiname + /// + public static InIReader GetInstance(String filename) + { + if (!instances.Keys.Contains(filename)) { + instances.Add(filename, new InIReader(filename)); + } + return instances[filename]; + } + + private void ReadAgain(Object sender, EventArgs e) + { + this.LoadFile(); + } + + private void LoadFile() + { + this.inifile = new Dictionary>(); + StreamReader file = new StreamReader(this.filename); + List buf = new List(); + String fline = ""; + while (fline != null) { + fline = file.ReadLine(); + if (fline != null && fline.Length > 0 && fline.Substring(0, 1) != ";") { + buf.Add(fline); + } + } + file.Close(); + Dictionary sub = new Dictionary(); + String cap = ""; + foreach (String line in buf) { + Match match = Regex.Match(line, @"^\[[a-zA-ZäöüÄÖÜ0-9\-\._/ ]+\]\w*$", RegexOptions.IgnoreCase); + if (match.Success) { + if (sub.Count != 0 && cap != "") { + this.inifile.Add(cap, sub); + } + cap = line; + sub = new Dictionary(); + } else { + if (line != "" && cap != "") { + String key = line.Substring(0, line.IndexOf('=')); + String value = line.Substring(line.IndexOf('=') + 1); + sub.Add(key, value); + } + } + } + if (sub.Count != 0 && cap != "") { + this.inifile.Add(cap, sub); + } + } + + /// + /// Gibt eine Liste an Sektionen zurück + /// + /// Default = true; false, wenn die Liste ohne Klammern sein soll. + /// + public List GetSections(Boolean withBrackets = true) + { + if(withBrackets) { + return this.inifile.Keys.ToList(); + } else { + List ret = new List(); + foreach (String item in this.inifile.Keys) { + ret.Add(item.Substring(1, item.Length - 2)); + } + return ret; + } + } + + /// + /// Überschreibt eine InI-Datei mit der Kompletten neuen Configuration + /// + /// Neue Konfiguration + public void SetSections(Dictionary> config) { + this.inifile.Clear(); + foreach (KeyValuePair> item in config) { + String key = item.Key; + if(!key.StartsWith("[")) { + key = "[" + key + "]"; + } + if (Regex.Match(key, @"^\[[a-zA-ZäöüÄÖÜ0-9\-\._/ ]+\]\w*$", RegexOptions.IgnoreCase).Success) { + this.inifile.Add(key, item.Value); + } + } + this.Changed(); + } + + public Dictionary GetSection(String section) { + if(this.inifile.Keys.Contains(section)) { + return this.inifile[section]; + } + if(this.inifile.Keys.Contains("["+section+"]")) { + return this.inifile["[" + section + "]"]; + } + return new Dictionary(); + } + + /// + /// Gibt einen einzelnen Wert zurück + /// + /// Name der Sektion + /// Name des Wertes + /// + public String GetValue(String section, String key) + { + if (!section.StartsWith("[")) { + section = "[" + section + "]"; + } + if (this.inifile.Keys.Contains(section)) { + if (this.inifile[section].Keys.Contains(key)) { + return this.inifile[section][key]; + } + } + return null; + } + + /// + /// Setzt einen Wert in einer Sektion + /// + /// Name der Sektion + /// Name des Wertes + /// Wert + public void SetValue(String section, String key, String value) + { + if (!section.StartsWith("[")) { + section = "[" + section + "]"; + } + if (this.inifile.Keys.Contains(section)) { + if (this.inifile[section].Keys.Contains(key)) { + this.inifile[section][key] = value; + } else { + this.inifile[section].Add(key, value); + } + } else { + Dictionary sub = new Dictionary { + { key, value } + }; + this.inifile.Add(section, sub); + } + this.Changed(); + } + + private void Changed() + { + this.k.Changed -= null; + SaveSettings(); + LoadFile(); + this.k.Changed += new FileSystemEventHandler(this.ReadAgain); + } + + private void SaveSettings() + { + StreamWriter file = new StreamWriter(this.filename); + file.BaseStream.SetLength(0); + file.BaseStream.Flush(); + file.BaseStream.Seek(0, SeekOrigin.Begin); + foreach (KeyValuePair> cap in this.inifile) { + file.WriteLine(cap.Key); + foreach (KeyValuePair sub in cap.Value) { + file.WriteLine(sub.Key + "=" + sub.Value); + } + file.WriteLine(); + } + file.Flush(); + file.Close(); + } + + /// + /// Fügt eine neue Sektion in der Ini-Datei ein. + /// + /// Sektionsname + /// true if added, false if error + public Boolean AddSection(String name) + { + if (!name.StartsWith("[")) { + name = "[" + name + "]"; + } + if (this.inifile.Keys.Contains(name)) { + return false; + } + this.inifile.Add(name, new Dictionary()); + this.Changed(); + return true; + } + + /// + /// Löscht eine Sektion inklusive Unterpunkte aus der Ini-Datei. + /// + /// Sektionsname + /// true if removed, false if error + public Boolean RemoveSection(String name) + { + if (!name.StartsWith("[")) { + name = "[" + name + "]"; + } + if (!this.inifile.Keys.Contains(name)) { + return false; + } + this.inifile.Remove(name); + this.Changed(); + return false; + } + protected virtual void Dispose(Boolean disposing) { + if (disposing) { + this.k.Dispose(); + } + } + + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + } +} diff --git a/OwnController.cs b/Utils/OwnController.cs similarity index 95% rename from OwnController.cs rename to Utils/OwnController.cs index e745eac..385827e 100644 --- a/OwnController.cs +++ b/Utils/OwnController.cs @@ -1,22 +1,22 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace BlubbFish.Utils -{ - public abstract class OwnController - { - /// - /// Führt den Controller aus. - /// - public void Execute() - { - this.Init(); - } - abstract protected void Init(); - abstract public void Dispose(); - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace BlubbFish.Utils +{ + public abstract class OwnController + { + /// + /// Führt den Controller aus. + /// + public void Execute() + { + this.Init(); + } + abstract protected void Init(); + abstract public void Dispose(); + } +} diff --git a/OwnModel.cs b/Utils/OwnModel.cs similarity index 95% rename from OwnModel.cs rename to Utils/OwnModel.cs index 6838a70..d856c0f 100644 --- a/OwnModel.cs +++ b/Utils/OwnModel.cs @@ -1,40 +1,40 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BlubbFish.Utils -{ - public abstract class OwnModel where T : class - { - private static readonly Lazy _instance = new Lazy(() => CreateInstanceOfT()); - private readonly List observer = new List(); - public static T Instance - { - get { - return _instance.Value; - } - } - private static T CreateInstanceOfT() - { - return Activator.CreateInstance(typeof(T), true) as T; - } - - public void SetObserver(OwnView view) - { - this.observer.Add(view); - view.Update(); - } - - public void RemoveObserver(OwnView view) { - this.observer.Remove(view); - } - protected void Update() - { - this.observer.ForEach(delegate (OwnView view) { view.Update(); }); - } - abstract protected void Init(); - abstract public void Dispose(); - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BlubbFish.Utils +{ + public abstract class OwnModel where T : class + { + private static readonly Lazy _instance = new Lazy(() => CreateInstanceOfT()); + private readonly List observer = new List(); + public static T Instance + { + get { + return _instance.Value; + } + } + private static T CreateInstanceOfT() + { + return Activator.CreateInstance(typeof(T), true) as T; + } + + public void SetObserver(OwnView view) + { + this.observer.Add(view); + view.Update(); + } + + public void RemoveObserver(OwnView view) { + this.observer.Remove(view); + } + protected void Update() + { + this.observer.ForEach(delegate (OwnView view) { view.Update(); }); + } + abstract protected void Init(); + abstract public void Dispose(); + } +} diff --git a/OwnObject.cs b/Utils/OwnObject.cs similarity index 97% rename from OwnObject.cs rename to Utils/OwnObject.cs index 8fd5f71..7a6c661 100644 --- a/OwnObject.cs +++ b/Utils/OwnObject.cs @@ -1,110 +1,110 @@ -using System; -using System.Collections.Generic; - -namespace BlubbFish.Utils -{ - abstract public class OwnObject - { - public struct LogObject { - public LogObject(DateTime date, String location, String message, LogLevel level) { - this.Date = date; - this.Location = location; - this.Message = message; - this.Level = level; - } - - public DateTime Date { get; set; } - public String Location { get; set; } - public String Message { get; set; } - public LogLevel Level { get; set; } - /// - /// Formates a LogMessage to a String - /// - /// Formated String - public override String ToString() { - return "[" + this.Date.ToString("R") + "]: " + this.Level.ToString() + " "+ this.Location + ", " + this.Message; - } - /// - /// Formates a LogMessage to a String - /// - /// Enables the output of the location - /// Enables the output of the date - /// Formated String - public String ToString(Boolean classNames, Boolean timeStamps) { - return (timeStamps ? "[" + this.Date.ToString("R") + "]: " + this.Level.ToString() + " " : "") + (classNames ? this.Location + ", " : "") + this.Message; - } - } - - private List loglist = new List(); - - public delegate void LogEvent(Object sender, LogEventArgs e); - public enum LogLevel : Int32 { - Debug = 1, - Notice = 2, - Info = 4, - Warn = 8, - Error = 16 - } - - public event LogEvent EventDebug; - public event LogEvent EventNotice; - public event LogEvent EventInfo; - public event LogEvent EventWarn; - public event LogEvent EventError; - public event LogEvent EventLog; - - /// - /// Get the Complete Log - /// - public List GetLog(LogLevel level, Boolean classNames, Boolean timeStamps) { - List ret = new List(); - foreach (LogObject t in this.loglist) { - if (t.Level >= level) { - ret.Add(t.ToString(classNames, timeStamps)); - } - } - return ret; - } - - /// - /// Put a message in the log - /// - /// Where the event arrives - /// The logmessage itselfs - /// Level of the message - protected void AddLog(String location, String message, LogLevel level) - { - this.AddLog(location, message, level, DateTime.Now); - } - - /// - /// Put a message in the log - /// - /// Where the event arrives - /// The logmessage itselfs - /// Level of the message - /// Date of the message - protected void AddLog(String location, String message, LogLevel level, DateTime date) - { - LogEventArgs e = new LogEventArgs(location, message, level, date); - if (EventDebug != null && level >= LogLevel.Debug) { - EventDebug(this, e); - } - if (EventNotice != null && level >= LogLevel.Notice) { - EventNotice(this, e); - } - if (EventInfo != null && level >= LogLevel.Info) { - EventInfo(this, e); - } - if (EventWarn != null && level >= LogLevel.Warn) { - EventWarn(this, e); - } - if (EventError != null && level >= LogLevel.Error) { - EventError(this, e); - } - EventLog?.Invoke(this, e); - - this.loglist.Add(new LogObject(date, location, message, level)); - } - } -} +using System; +using System.Collections.Generic; + +namespace BlubbFish.Utils +{ + abstract public class OwnObject + { + public struct LogObject { + public LogObject(DateTime date, String location, String message, LogLevel level) { + this.Date = date; + this.Location = location; + this.Message = message; + this.Level = level; + } + + public DateTime Date { get; set; } + public String Location { get; set; } + public String Message { get; set; } + public LogLevel Level { get; set; } + /// + /// Formates a LogMessage to a String + /// + /// Formated String + public override String ToString() { + return "[" + this.Date.ToString("R") + "]: " + this.Level.ToString() + " "+ this.Location + ", " + this.Message; + } + /// + /// Formates a LogMessage to a String + /// + /// Enables the output of the location + /// Enables the output of the date + /// Formated String + public String ToString(Boolean classNames, Boolean timeStamps) { + return (timeStamps ? "[" + this.Date.ToString("R") + "]: " + this.Level.ToString() + " " : "") + (classNames ? this.Location + ", " : "") + this.Message; + } + } + + private List loglist = new List(); + + public delegate void LogEvent(Object sender, LogEventArgs e); + public enum LogLevel : Int32 { + Debug = 1, + Notice = 2, + Info = 4, + Warn = 8, + Error = 16 + } + + public event LogEvent EventDebug; + public event LogEvent EventNotice; + public event LogEvent EventInfo; + public event LogEvent EventWarn; + public event LogEvent EventError; + public event LogEvent EventLog; + + /// + /// Get the Complete Log + /// + public List GetLog(LogLevel level, Boolean classNames, Boolean timeStamps) { + List ret = new List(); + foreach (LogObject t in this.loglist) { + if (t.Level >= level) { + ret.Add(t.ToString(classNames, timeStamps)); + } + } + return ret; + } + + /// + /// Put a message in the log + /// + /// Where the event arrives + /// The logmessage itselfs + /// Level of the message + protected void AddLog(String location, String message, LogLevel level) + { + this.AddLog(location, message, level, DateTime.Now); + } + + /// + /// Put a message in the log + /// + /// Where the event arrives + /// The logmessage itselfs + /// Level of the message + /// Date of the message + protected void AddLog(String location, String message, LogLevel level, DateTime date) + { + LogEventArgs e = new LogEventArgs(location, message, level, date); + if (EventDebug != null && level >= LogLevel.Debug) { + EventDebug(this, e); + } + if (EventNotice != null && level >= LogLevel.Notice) { + EventNotice(this, e); + } + if (EventInfo != null && level >= LogLevel.Info) { + EventInfo(this, e); + } + if (EventWarn != null && level >= LogLevel.Warn) { + EventWarn(this, e); + } + if (EventError != null && level >= LogLevel.Error) { + EventError(this, e); + } + EventLog?.Invoke(this, e); + + this.loglist.Add(new LogObject(date, location, message, level)); + } + } +} diff --git a/OwnView.cs b/Utils/OwnView.cs similarity index 95% rename from OwnView.cs rename to Utils/OwnView.cs index 4559566..bd30612 100644 --- a/OwnView.cs +++ b/Utils/OwnView.cs @@ -1,24 +1,24 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BlubbFish.Utils { - public abstract class OwnView { - - protected OwnView() { } - /// - /// Called if the Oberver (Model) updates its View - /// - public abstract void Update(); - /// - /// Called if view is viewed - /// - //protected abstract void Init(); - /// - /// Called if Form is Disposed - /// - public abstract void Dispose(); - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BlubbFish.Utils { + public abstract class OwnView { + + protected OwnView() { } + /// + /// Called if the Oberver (Model) updates its View + /// + public abstract void Update(); + /// + /// Called if view is viewed + /// + //protected abstract void Init(); + /// + /// Called if Form is Disposed + /// + public abstract void Dispose(); + } +} diff --git a/ProgramLogger.cs b/Utils/ProgramLogger.cs similarity index 97% rename from ProgramLogger.cs rename to Utils/ProgramLogger.cs index 68fc821..4f297b2 100644 --- a/ProgramLogger.cs +++ b/Utils/ProgramLogger.cs @@ -1,170 +1,170 @@ -using System; -using System.IO; -using System.Reflection; -using System.Security; -using System.Security.Permissions; -using System.Text; - -namespace BlubbFish.Utils { - public class ProgramLogger { - private FileWriter fw; - private ConsoleWriter stdout; - private ConsoleWriter errout; - private String loggerfile; - - public ProgramLogger() { - this.loggerfile = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "output.log"; - this.Init(this.loggerfile); - this.AttachToFw(); - this.SetOutputs(); - } - - private void SetOutputs() { - Console.SetOut(this.stdout); - Console.SetError(this.errout); - } - - private void Init(String file) { - if(!this.IsWritable(file)) { - Console.Error.WriteLine("Cannot write to " + file); - throw new ArgumentException("Cannot write to " + file); - } - this.fw = new FileWriter(file); - this.stdout = new ConsoleWriter(Console.Out, ConsoleWriterEventArgs.ConsoleType.Info); - this.errout = new ConsoleWriter(Console.Error, ConsoleWriterEventArgs.ConsoleType.Error); - } - - private Boolean IsWritable(String filename) { - FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename); - PermissionSet p = new PermissionSet(PermissionState.None); - p.AddPermission(writePermission); - if (!p.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet)) { - return false; - } - try { - using (FileStream fstream = new FileStream(filename, FileMode.Append)) - using (TextWriter writer = new StreamWriter(fstream)) { - writer.Write(""); - } - } catch (UnauthorizedAccessException) { - return false; - } - return true; - } - - public void SetPath(String file) { - if(file == null) { - return; - } - if (!this.IsWritable(file)) { - Console.Error.WriteLine("Cannot write to " + file); - throw new ArgumentException("Cannot write to " + file); - } - this.DisattachToFw(); - this.fw.Close(); - if(new FileInfo(this.loggerfile).Length > 0) { - File.Move(this.loggerfile, file); - } else { - File.Delete(this.loggerfile); - } - this.loggerfile = file; - this.fw = new FileWriter(this.loggerfile); - this.AttachToFw(); - } - - private void DisattachToFw() { - this.stdout.WriteEvent -= this.fw.Write; - this.stdout.WriteLineEvent -= this.fw.WriteLine; - this.errout.WriteEvent -= this.fw.WriteLine; - this.errout.WriteLineEvent -= this.fw.WriteLine; - } - private void AttachToFw() { - this.stdout.WriteEvent += this.fw.Write; - this.stdout.WriteLineEvent += this.fw.WriteLine; - this.errout.WriteEvent += this.fw.WriteLine; - this.errout.WriteLineEvent += this.fw.WriteLine; - } - } - - internal class FileWriter : StreamWriter { - private Boolean newline = true; - public FileWriter(String path) : base(path) { - } - - public override Encoding Encoding { get { return Encoding.UTF8; } } - public override Boolean AutoFlush { get { return true; } set { base.AutoFlush = value; } } - - private void Write(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) { - String text = ""; - if (this.newline) { - text = "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value; - this.newline = false; - } else { - text = value; - } - origstream.Write(text); - base.Write(text); - base.Flush(); - } - - private void WriteLine(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) { - String text = ""; - if (this.newline) { - text = "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value; - } else { - text = value; - } - this.newline = true; - origstream.WriteLine(text); - base.WriteLine(text); - base.Flush(); - } - - internal void Write(Object sender, ConsoleWriterEventArgs e) { - this.Write(e.Value, e.Writer, e.StreamType); - } - - internal void WriteLine(Object sender, ConsoleWriterEventArgs e) { - this.WriteLine(e.Value, e.Writer, e.StreamType); - } - } - - internal class ConsoleWriterEventArgs : EventArgs { - public String Value { get; private set; } - public TextWriter Writer { get; private set; } - public ConsoleType StreamType { get; private set; } - - public enum ConsoleType { - Info, - Error - } - - public ConsoleWriterEventArgs(String value, TextWriter writer, ConsoleType type) { - this.Value = value; - this.Writer = writer; - this.StreamType = type; - } - } - - internal class ConsoleWriter : TextWriter { - private readonly TextWriter stream; - private readonly ConsoleWriterEventArgs.ConsoleType streamtype; - - public ConsoleWriter(TextWriter writer, ConsoleWriterEventArgs.ConsoleType type) { - this.stream = writer; - this.streamtype = type; - } - - public override Encoding Encoding { get { return Encoding.UTF8; } } - public override void Write(String value) { - this.WriteEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype)); - base.Write(value); - } - public override void WriteLine(String value) { - this.WriteLineEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype)); - base.WriteLine(value); - } - public event EventHandler WriteEvent; - public event EventHandler WriteLineEvent; - } -} +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Security.Permissions; +using System.Text; + +namespace BlubbFish.Utils { + public class ProgramLogger { + private FileWriter fw; + private ConsoleWriter stdout; + private ConsoleWriter errout; + private String loggerfile; + + public ProgramLogger() { + this.loggerfile = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "output.log"; + this.Init(this.loggerfile); + this.AttachToFw(); + this.SetOutputs(); + } + + private void SetOutputs() { + Console.SetOut(this.stdout); + Console.SetError(this.errout); + } + + private void Init(String file) { + if(!this.IsWritable(file)) { + Console.Error.WriteLine("Cannot write to " + file); + throw new ArgumentException("Cannot write to " + file); + } + this.fw = new FileWriter(file); + this.stdout = new ConsoleWriter(Console.Out, ConsoleWriterEventArgs.ConsoleType.Info); + this.errout = new ConsoleWriter(Console.Error, ConsoleWriterEventArgs.ConsoleType.Error); + } + + private Boolean IsWritable(String filename) { + FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename); + PermissionSet p = new PermissionSet(PermissionState.None); + p.AddPermission(writePermission); + if (!p.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet)) { + return false; + } + try { + using (FileStream fstream = new FileStream(filename, FileMode.Append)) + using (TextWriter writer = new StreamWriter(fstream)) { + writer.Write(""); + } + } catch (UnauthorizedAccessException) { + return false; + } + return true; + } + + public void SetPath(String file) { + if(file == null) { + return; + } + if (!this.IsWritable(file)) { + Console.Error.WriteLine("Cannot write to " + file); + throw new ArgumentException("Cannot write to " + file); + } + this.DisattachToFw(); + this.fw.Close(); + if(new FileInfo(this.loggerfile).Length > 0) { + File.Move(this.loggerfile, file); + } else { + File.Delete(this.loggerfile); + } + this.loggerfile = file; + this.fw = new FileWriter(this.loggerfile); + this.AttachToFw(); + } + + private void DisattachToFw() { + this.stdout.WriteEvent -= this.fw.Write; + this.stdout.WriteLineEvent -= this.fw.WriteLine; + this.errout.WriteEvent -= this.fw.WriteLine; + this.errout.WriteLineEvent -= this.fw.WriteLine; + } + private void AttachToFw() { + this.stdout.WriteEvent += this.fw.Write; + this.stdout.WriteLineEvent += this.fw.WriteLine; + this.errout.WriteEvent += this.fw.WriteLine; + this.errout.WriteLineEvent += this.fw.WriteLine; + } + } + + internal class FileWriter : StreamWriter { + private Boolean newline = true; + public FileWriter(String path) : base(path) { + } + + public override Encoding Encoding { get { return Encoding.UTF8; } } + public override Boolean AutoFlush { get { return true; } set { base.AutoFlush = value; } } + + private void Write(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) { + String text = ""; + if (this.newline) { + text = "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value; + this.newline = false; + } else { + text = value; + } + origstream.Write(text); + base.Write(text); + base.Flush(); + } + + private void WriteLine(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) { + String text = ""; + if (this.newline) { + text = "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value; + } else { + text = value; + } + this.newline = true; + origstream.WriteLine(text); + base.WriteLine(text); + base.Flush(); + } + + internal void Write(Object sender, ConsoleWriterEventArgs e) { + this.Write(e.Value, e.Writer, e.StreamType); + } + + internal void WriteLine(Object sender, ConsoleWriterEventArgs e) { + this.WriteLine(e.Value, e.Writer, e.StreamType); + } + } + + internal class ConsoleWriterEventArgs : EventArgs { + public String Value { get; private set; } + public TextWriter Writer { get; private set; } + public ConsoleType StreamType { get; private set; } + + public enum ConsoleType { + Info, + Error + } + + public ConsoleWriterEventArgs(String value, TextWriter writer, ConsoleType type) { + this.Value = value; + this.Writer = writer; + this.StreamType = type; + } + } + + internal class ConsoleWriter : TextWriter { + private readonly TextWriter stream; + private readonly ConsoleWriterEventArgs.ConsoleType streamtype; + + public ConsoleWriter(TextWriter writer, ConsoleWriterEventArgs.ConsoleType type) { + this.stream = writer; + this.streamtype = type; + } + + public override Encoding Encoding { get { return Encoding.UTF8; } } + public override void Write(String value) { + this.WriteEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype)); + base.Write(value); + } + public override void WriteLine(String value) { + this.WriteLineEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype)); + base.WriteLine(value); + } + public event EventHandler WriteEvent; + public event EventHandler WriteLineEvent; + } +} diff --git a/Properties/AssemblyInfo.cs b/Utils/Properties/AssemblyInfo.cs similarity index 97% rename from Properties/AssemblyInfo.cs rename to Utils/Properties/AssemblyInfo.cs index ed13983..76c47c8 100644 --- a/Properties/AssemblyInfo.cs +++ b/Utils/Properties/AssemblyInfo.cs @@ -1,40 +1,40 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Allgemeine Informationen über eine Assembly werden über die folgenden -// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -// die mit einer Assembly verknüpft sind. -[assembly: AssemblyTitle("Utils")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Utils")] -[assembly: AssemblyCopyright("Copyright © 2014 - 02.10.2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar -// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von -// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. -[assembly: ComVisible(false)] - -// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird -[assembly: Guid("6f20376a-5c71-4979-9932-13c105d1c6e6")] - -// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: -// -// Hauptversion -// Nebenversion -// Buildnummer -// Revision -// -// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern -// übernehmen, indem Sie "*" eingeben: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.4.0")] -[assembly: AssemblyFileVersion("1.4.0")] - -/** - * 1.4.0 Add Helper to Utils - */ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die mit einer Assembly verknüpft sind. +[assembly: AssemblyTitle("Utils")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Utils")] +[assembly: AssemblyCopyright("Copyright © 2014 - 02.10.2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("6f20376a-5c71-4979-9932-13c105d1c6e6")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.4.0")] +[assembly: AssemblyFileVersion("1.4.0")] + +/** + * 1.4.0 Add Helper to Utils + */ diff --git a/Updater.cs b/Utils/Updater.cs similarity index 97% rename from Updater.cs rename to Utils/Updater.cs index 8575ef3..fc4eb0e 100644 --- a/Updater.cs +++ b/Utils/Updater.cs @@ -1,192 +1,192 @@ - -using System; -using System.IO; -using System.Net; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading; -using System.Xml; - -namespace BlubbFish.Utils { - public class Updater : OwnObject { - private static Updater instances; - private String url; - private VersionInfo[] versions; - private Thread t; - - public struct VersionInfo { - public VersionInfo(Type type) { - this.Name = type.Assembly.GetName().Name; - this.Version = type.Assembly.GetName().Version.ToString(); - this.Filename = type.Assembly.ManifestModule.Name; - this.GUID = ((GuidAttribute)type.Assembly.GetCustomAttribute(typeof(GuidAttribute))).Value; - this.HasUpdate = false; - } - - public String Name { get; private set; } - public String Version { get; private set; } - public String Filename { get; private set; } - public String GUID { get; private set; } - public Boolean HasUpdate { get; set; } - } - - public delegate void UpdateStatus(Object sender, UpdaterEventArgs e); - public delegate void UpdateFail(Object sender, UpdaterFailEventArgs e); - - public event UpdateStatus UpdateResult; - public event UpdateFail ErrorRaised; - - private Updater() { } - - /// - /// Get Instance of Updater - /// - public static Updater Instance { - get { - if(instances == null) { - instances = new Updater(); - } - return instances; - } - } - - /// - /// Waits for the Result of the Updater thread. - /// - public void WaitForExit(Boolean exceuteUpdate = true) { - while (this.t.ThreadState == ThreadState.Running) { } - if(exceuteUpdate) { - if(File.Exists("update.bat")) { - System.Diagnostics.Process.Start("update.bat"); - } - } - } - - /// - /// Set Path to check for Updates - /// - /// HTTP URI - public void SetUpdateInfo(String url, VersionInfo[] versions) { - this.url = url; - this.versions = versions; - FileStream file = new FileStream("version.xml",FileMode.Create); - XmlTextWriter xml = new XmlTextWriter(file, Encoding.UTF8); - xml.WriteStartDocument(); - xml.WriteWhitespace("\n"); - xml.WriteStartElement("filelist"); - xml.WriteWhitespace("\n"); - foreach (VersionInfo version in versions) { - xml.WriteWhitespace("\t"); - xml.WriteStartElement("file"); - xml.WriteAttributeString("Version", version.Version); - xml.WriteAttributeString("Filename", version.Filename); - xml.WriteAttributeString("GUID", version.GUID); - xml.WriteString(version.Name); - xml.WriteEndElement(); - xml.WriteWhitespace("\n"); - } - xml.WriteEndElement(); - xml.Flush(); - file.Flush(); - file.Close(); - } - - /// - /// Check for Updates - /// - /// - public void Check() { - if(this.url == "") { - throw new ArgumentException("Zuerst eine URL setzen!"); - } - if(this.versions.Length == 0) { - throw new ArgumentException("Zuerst Dateien registrieren!"); - } - if(this.UpdateResult == null) { - throw new ArgumentNullException("Zuerst das Update Event anhängen."); - } - this.t = new Thread(this.Runner); - this.t.Start(); - } - - private void Runner() { - Thread.Sleep(1000); - try { - Stream stream = WebRequest.Create(this.url + "version.xml").GetResponse().GetResponseStream(); - String content = new StreamReader(stream).ReadToEnd(); - Boolean update = false; - XmlDocument doc = new XmlDocument(); - doc.LoadXml(content); - foreach (XmlNode node in doc.DocumentElement.ChildNodes) { - String guid = node.Attributes["GUID"].Value; - String version = node.Attributes["Version"].Value; - for(Int32 i=0;i - /// Update the file - /// - /// Updates the Programm after it has been closed - /// - public Boolean Update(Boolean afterExit = true) { - try { - if (afterExit) { - this.UpdateAfter(); - } else { - this.UpdateNow(); - } - } catch (Exception e) { - this.ErrorRaised?.Invoke(this, new UpdaterFailEventArgs(e)); - return false; - } - return true; - } - - private void UpdateAfter() { - this.UpdateNow(true); - StreamWriter update = new StreamWriter("update.bat", false); - update.WriteLine("echo off"); - update.WriteLine("echo \"Warte 10s\""); - update.WriteLine("ping 127.0.0.1 -n 10"); - update.WriteLine("echo \"Kopiere Dateien....\""); - foreach (VersionInfo file in this.versions) { - if (file.HasUpdate) { - update.WriteLine("echo \"Kopiere " + file.Filename + "\""); - update.WriteLine("del " + file.Filename); - update.WriteLine("move " + file.Filename + "_ " + file.Filename); - } - } - update.WriteLine("start cmd /C ping 127.0.0.1 -n 10 & del update.bat"); - update.Flush(); - update.Close(); - } - - private void UpdateNow(Boolean forAfter = false) { - foreach (VersionInfo file in this.versions) { - if (file.HasUpdate) { - Stream stream = WebRequest.Create(this.url + file.Filename).GetResponse().GetResponseStream(); - FileStream target = new FileStream(file.Filename + (forAfter ? "_" : ""), FileMode.Create); - stream.CopyTo(target); - target.Flush(); - target.Close(); - } - } - } - } -} + +using System; +using System.IO; +using System.Net; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Xml; + +namespace BlubbFish.Utils { + public class Updater : OwnObject { + private static Updater instances; + private String url; + private VersionInfo[] versions; + private Thread t; + + public struct VersionInfo { + public VersionInfo(Type type) { + this.Name = type.Assembly.GetName().Name; + this.Version = type.Assembly.GetName().Version.ToString(); + this.Filename = type.Assembly.ManifestModule.Name; + this.GUID = ((GuidAttribute)type.Assembly.GetCustomAttribute(typeof(GuidAttribute))).Value; + this.HasUpdate = false; + } + + public String Name { get; private set; } + public String Version { get; private set; } + public String Filename { get; private set; } + public String GUID { get; private set; } + public Boolean HasUpdate { get; set; } + } + + public delegate void UpdateStatus(Object sender, UpdaterEventArgs e); + public delegate void UpdateFail(Object sender, UpdaterFailEventArgs e); + + public event UpdateStatus UpdateResult; + public event UpdateFail ErrorRaised; + + private Updater() { } + + /// + /// Get Instance of Updater + /// + public static Updater Instance { + get { + if(instances == null) { + instances = new Updater(); + } + return instances; + } + } + + /// + /// Waits for the Result of the Updater thread. + /// + public void WaitForExit(Boolean exceuteUpdate = true) { + while (this.t.ThreadState == ThreadState.Running) { } + if(exceuteUpdate) { + if(File.Exists("update.bat")) { + System.Diagnostics.Process.Start("update.bat"); + } + } + } + + /// + /// Set Path to check for Updates + /// + /// HTTP URI + public void SetUpdateInfo(String url, VersionInfo[] versions) { + this.url = url; + this.versions = versions; + FileStream file = new FileStream("version.xml",FileMode.Create); + XmlTextWriter xml = new XmlTextWriter(file, Encoding.UTF8); + xml.WriteStartDocument(); + xml.WriteWhitespace("\n"); + xml.WriteStartElement("filelist"); + xml.WriteWhitespace("\n"); + foreach (VersionInfo version in versions) { + xml.WriteWhitespace("\t"); + xml.WriteStartElement("file"); + xml.WriteAttributeString("Version", version.Version); + xml.WriteAttributeString("Filename", version.Filename); + xml.WriteAttributeString("GUID", version.GUID); + xml.WriteString(version.Name); + xml.WriteEndElement(); + xml.WriteWhitespace("\n"); + } + xml.WriteEndElement(); + xml.Flush(); + file.Flush(); + file.Close(); + } + + /// + /// Check for Updates + /// + /// + public void Check() { + if(this.url == "") { + throw new ArgumentException("Zuerst eine URL setzen!"); + } + if(this.versions.Length == 0) { + throw new ArgumentException("Zuerst Dateien registrieren!"); + } + if(this.UpdateResult == null) { + throw new ArgumentNullException("Zuerst das Update Event anhängen."); + } + this.t = new Thread(this.Runner); + this.t.Start(); + } + + private void Runner() { + Thread.Sleep(1000); + try { + Stream stream = WebRequest.Create(this.url + "version.xml").GetResponse().GetResponseStream(); + String content = new StreamReader(stream).ReadToEnd(); + Boolean update = false; + XmlDocument doc = new XmlDocument(); + doc.LoadXml(content); + foreach (XmlNode node in doc.DocumentElement.ChildNodes) { + String guid = node.Attributes["GUID"].Value; + String version = node.Attributes["Version"].Value; + for(Int32 i=0;i + /// Update the file + /// + /// Updates the Programm after it has been closed + /// + public Boolean Update(Boolean afterExit = true) { + try { + if (afterExit) { + this.UpdateAfter(); + } else { + this.UpdateNow(); + } + } catch (Exception e) { + this.ErrorRaised?.Invoke(this, new UpdaterFailEventArgs(e)); + return false; + } + return true; + } + + private void UpdateAfter() { + this.UpdateNow(true); + StreamWriter update = new StreamWriter("update.bat", false); + update.WriteLine("echo off"); + update.WriteLine("echo \"Warte 10s\""); + update.WriteLine("ping 127.0.0.1 -n 10"); + update.WriteLine("echo \"Kopiere Dateien....\""); + foreach (VersionInfo file in this.versions) { + if (file.HasUpdate) { + update.WriteLine("echo \"Kopiere " + file.Filename + "\""); + update.WriteLine("del " + file.Filename); + update.WriteLine("move " + file.Filename + "_ " + file.Filename); + } + } + update.WriteLine("start cmd /C ping 127.0.0.1 -n 10 & del update.bat"); + update.Flush(); + update.Close(); + } + + private void UpdateNow(Boolean forAfter = false) { + foreach (VersionInfo file in this.versions) { + if (file.HasUpdate) { + Stream stream = WebRequest.Create(this.url + file.Filename).GetResponse().GetResponseStream(); + FileStream target = new FileStream(file.Filename + (forAfter ? "_" : ""), FileMode.Create); + stream.CopyTo(target); + target.Flush(); + target.Close(); + } + } + } + } +} diff --git a/Utils.csproj b/Utils/Utils.csproj similarity index 97% rename from Utils.csproj rename to Utils/Utils.csproj index 770adde..8a6c07e 100644 --- a/Utils.csproj +++ b/Utils/Utils.csproj @@ -1,66 +1,66 @@ - - - - - Debug - AnyCPU - {FAC8CE64-BF13-4ECE-8097-AEB5DD060098} - Library - Properties - BlubbFish.Utils - Utils - v4.7.1 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098} + Library + Properties + BlubbFish.Utils + Utils + v4.7.1 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file