From 2defc3ae5e50896d48cd423872da68f753da7ca6 Mon Sep 17 00:00:00 2001 From: Timerix Date: Mon, 4 Oct 2021 23:25:42 +0300 Subject: [PATCH] REFACTORING --- Color.cs | 6 +- ColoredConsole.cs | 71 ++++++++------- CompressedArray.cs | 37 ++++---- ConsoleGUI/Container.cs | 36 ++++---- ConsoleGUI/Label.cs | 17 ++-- ConsoleGUI/Window.cs | 10 +- ConsoleGUI/WindowOld.cs | 85 +++++++++-------- Dtsod/DtsodV21.cs | 124 ++++++++++++++----------- Dtsod/DtsodV23.cs | 171 +++++++++++++++++++---------------- EventHandlerAsync.cs | 2 + Filesystem/Directory.cs | 49 +++++----- Filesystem/File.cs | 22 +++-- Filesystem/OldFilework.cs | 30 +++--- Hasher.cs | 14 +-- Network/FSP.cs | 134 ++++++++++++++------------- Network/OldNetwork.cs | 20 ++-- Network/Package.cs | 27 +++--- Reactive/ReactiveListener.cs | 14 +-- Reactive/ReactiveProvider.cs | 31 +++---- Reactive/ReactiveStream.cs | 5 +- Reactive/ReactiveWorker.cs | 2 +- SafeMutex.cs | 15 +-- SimpleConverter.cs | 40 ++++---- TImer.cs | 20 ++-- XXHash.cs | 140 ++++++++++++++-------------- 25 files changed, 583 insertions(+), 539 deletions(-) diff --git a/Color.cs b/Color.cs index e7c4691..ae91fe7 100644 --- a/Color.cs +++ b/Color.cs @@ -8,7 +8,8 @@ namespace DTLib { public RGBA(byte[] arrayRGBA) : this(arrayRGBA[0], arrayRGBA[1], arrayRGBA[2], arrayRGBA[3]) { - if (arrayRGBA.Length != 4) throw new Exception("Color.RGBA(byte[] arrayRGBA) error: arrayRGBA.Length != 4\n"); + if(arrayRGBA.Length!=4) + throw new Exception("Color.RGBA(byte[] arrayRGBA) error: arrayRGBA.Length != 4\n"); } } @@ -16,7 +17,8 @@ namespace DTLib { public RGB(byte[] arrayRGB) : this(arrayRGB[0], arrayRGB[1], arrayRGB[2]) { - if (arrayRGB.Length != 3) throw new Exception("Color.RGB(byte[] arrayRGB) error: arrayRGB.Length != 3\n"); + if(arrayRGB.Length!=3) + throw new Exception("Color.RGB(byte[] arrayRGB) error: arrayRGB.Length != 3\n"); } } } diff --git a/ColoredConsole.cs b/ColoredConsole.cs index 1d03111..4d07d4e 100644 --- a/ColoredConsole.cs +++ b/ColoredConsole.cs @@ -10,64 +10,65 @@ namespace DTLib public static class ColoredConsole { // парсит название цвета в ConsoleColor - public static ConsoleColor ParseColor(string color) + public static ConsoleColor ParseColor(string color) => color switch { - return color switch - { - //case "magneta": - "m" => ConsoleColor.Magenta, - //case "green": - "g" => ConsoleColor.Green, - //case "red": - "r" => ConsoleColor.Red, - //case "yellow": - "y" => ConsoleColor.Yellow, - //case "white": - "w" => ConsoleColor.White, - //case "blue": - "b" => ConsoleColor.Blue, - //case "cyan": - "c" => ConsoleColor.Cyan, - //case "gray": - "gray" => ConsoleColor.Gray, - //case "black": - "black" => ConsoleColor.Black, - _ => throw new Exception($"ColoredConsole.ParseColor({color}) error: incorrect color"), - }; - } + //case "magneta": + "m" => ConsoleColor.Magenta, + //case "green": + "g" => ConsoleColor.Green, + //case "red": + "r" => ConsoleColor.Red, + //case "yellow": + "y" => ConsoleColor.Yellow, + //case "white": + "w" => ConsoleColor.White, + //case "blue": + "b" => ConsoleColor.Blue, + //case "cyan": + "c" => ConsoleColor.Cyan, + //case "gray": + "gray" => ConsoleColor.Gray, + //case "black": + "black" => ConsoleColor.Black, + _ => throw new Exception($"ColoredConsole.ParseColor({color}) error: incorrect color"), + }; // вывод цветного текста public static void Write(params string[] input) { - if (input.Length == 1) + if(input.Length==1) { - if (Console.ForegroundColor != ConsoleColor.Gray) Console.ForegroundColor = ConsoleColor.Gray; + if(Console.ForegroundColor!=ConsoleColor.Gray) + Console.ForegroundColor=ConsoleColor.Gray; Console.Write(input[0]); } - else if (input.Length % 2 == 0) + else if(input.Length%2==0) { StringBuilder strB = new(); - for (ushort i = 0; i < input.Length; i++) + for(ushort i = 0; i 0) Console.Write(strB.ToString()); + if(strB.Length>0) + Console.Write(strB.ToString()); } - else throw new Exception("ColoredConsole.Write() error: every text string must have color string before"); + else + throw new Exception("ColoredConsole.Write() error: every text string must have color string before"); } // ввод цветного текста public static string Read(string color) { - var c = ParseColor(color); - if (Console.ForegroundColor != c) Console.ForegroundColor = c; + ConsoleColor c = ParseColor(color); + if(Console.ForegroundColor!=c) + Console.ForegroundColor=c; return Console.ReadLine(); } } diff --git a/CompressedArray.cs b/CompressedArray.cs index 8b6b69e..d98b8db 100644 --- a/CompressedArray.cs +++ b/CompressedArray.cs @@ -12,10 +12,7 @@ namespace DTLib T[] Memory; public Array1D() { } - public Array1D(T[] sourceArray) - { - CompressArray(sourceArray); - } + public Array1D(T[] sourceArray) => CompressArray(sourceArray); public void CompressArray(T[] sourceArray) { @@ -25,25 +22,26 @@ namespace DTLib listMem.Add(sourceArray[0]); listDesc.Add(1); byte repeats = 1; - for (int i = 1; i < sourceArray.Length; i++) + for(int i = 1; i 1) + if(repeats>1) { - listDesc[listDesc.Count - 2] = repeats; - repeats = 1; + listDesc[listDesc.Count-2]=repeats; + repeats=1; } } - prevElement = sourceArray[i]; + prevElement=sourceArray[i]; } - Memory = listMem.ToArray(); - Description = listDesc.ToArray(); - ColoredConsole.Write("b", "listMem.Count: ", "c", listMem.Count.ToString(), "b", " listDesc.Count: ", "c", listDesc.Count + "\n"); - for (short i = 0; i < listDesc.Count; i++) + Memory=listMem.ToArray(); + Description=listDesc.ToArray(); + ColoredConsole.Write("b", "listMem.Count: ", "c", listMem.Count.ToString(), "b", " listDesc.Count: ", "c", listDesc.Count+"\n"); + for(short i = 0; i Colormap=File.ReadAllText(ColormapFile).ToCharArray(); public void GenTextmap() { - Textmap = File.ReadAllText(TextmapFile).ToCharArray(); - Width = 12; - Height = 3; + Textmap=File.ReadAllText(TextmapFile).ToCharArray(); + Width=12; + Height=3; } } } diff --git a/ConsoleGUI/Window.cs b/ConsoleGUI/Window.cs index 27f3af8..ff347c4 100644 --- a/ConsoleGUI/Window.cs +++ b/ConsoleGUI/Window.cs @@ -13,11 +13,11 @@ namespace DTLib.ConsoleGUI public Window(string layout_file) : base("window", layout_file) { Console.Clear(); - Console.SetWindowSize(Width + 1, Height + 1); - Console.SetBufferSize(Width + 1, Height + 1); - Console.OutputEncoding = Encoding.Unicode; - Console.InputEncoding = Encoding.Unicode; - Console.CursorVisible = false; + Console.SetWindowSize(Width+1, Height+1); + Console.SetBufferSize(Width+1, Height+1); + Console.OutputEncoding=Encoding.Unicode; + Console.InputEncoding=Encoding.Unicode; + Console.CursorVisible=false; } // выводит все символы diff --git a/ConsoleGUI/WindowOld.cs b/ConsoleGUI/WindowOld.cs index 592a4ba..4aa0bcd 100644 --- a/ConsoleGUI/WindowOld.cs +++ b/ConsoleGUI/WindowOld.cs @@ -21,29 +21,29 @@ namespace DTLib.ConsoleGUI public WindowOld(int windowWidth, int windowHeight) { - WindowWidth = windowWidth; - WindowHeight = windowHeight; - Text = new char[windowWidth, windowHeight]; - TextColors = new char[windowWidth, windowHeight]; - nowText = TextColors; - nowTextColors = new char[windowWidth, windowHeight]; - Console.WindowWidth = WindowWidth + 1; - Console.WindowHeight = WindowHeight + 1; - Console.BufferWidth = WindowWidth + 1; - Console.BufferHeight = WindowHeight + 1; - Console.OutputEncoding = Encoding.Unicode; - Console.InputEncoding = Encoding.Unicode; - Console.CursorVisible = false; + WindowWidth=windowWidth; + WindowHeight=windowHeight; + Text=new char[windowWidth, windowHeight]; + TextColors=new char[windowWidth, windowHeight]; + nowText=TextColors; + nowTextColors=new char[windowWidth, windowHeight]; + Console.WindowWidth=WindowWidth+1; + Console.WindowHeight=WindowHeight+1; + Console.BufferWidth=WindowWidth+1; + Console.BufferHeight=WindowHeight+1; + Console.OutputEncoding=Encoding.Unicode; + Console.InputEncoding=Encoding.Unicode; + Console.CursorVisible=false; // заполнение массивов - for (sbyte y = 0; y < WindowHeight; y++) + for(sbyte y = 0; y Console.SetCursorPosition(0, WindowHeight); // заменяет символ выведенный, использовать после ShowAll() public void ChangeChar(sbyte x, sbyte y, char ch) { - Text[x, y] = ch; - nowText[x, y] = ch; + Text[x, y]=ch; + nowText[x, y]=ch; Console.SetCursorPosition(x, y); ColoredConsole.Write(TextColors[x, y].ToString(), ch.ToString()); } public void ChangeColor(sbyte x, sbyte y, char color) { - TextColors[x, y] = color; - nowTextColors[x, y] = color; + TextColors[x, y]=color; + nowTextColors[x, y]=color; Console.SetCursorPosition(x, y); ColoredConsole.Write(color.ToString(), Text[x, y].ToString()); } public void ChangeCharAndColor(sbyte x, sbyte y, char color, char ch) { - Text[x, y] = ch; - nowText[x, y] = ch; - TextColors[x, y] = color; - nowTextColors[x, y] = color; + Text[x, y]=ch; + nowText[x, y]=ch; + TextColors[x, y]=color; + nowTextColors[x, y]=color; Console.SetCursorPosition(x, y); ColoredConsole.Write(color.ToString(), ch.ToString()); } @@ -132,12 +129,12 @@ namespace DTLib.ConsoleGUI public void ChangeLine(sbyte x, sbyte y, char color, string line) { Console.SetCursorPosition(x, y); - for (sbyte i = 0; i < line.Length; i++) + for(sbyte i = 0; i(); - for (sbyte y = 0; y < WindowHeight; y++) + for(sbyte y = 0; y Values { get; set; } public DtsodV21(string text) { - Text = text; - foreach (KeyValuePair pair in Parse(text)) + Text=text; + foreach(KeyValuePair pair in Parse(text)) Add(pair.Key, pair.Value); } @@ -34,13 +34,17 @@ namespace DTLib.Dtsod { get { - if (TryGetValue(key, out dynamic value)) return value; - else throw new Exception($"Dtsod[{key}] key not found"); + if(TryGetValue(key, out dynamic value)) + return value; + else + throw new Exception($"Dtsod[{key}] key not found"); } set { - if (TrySetValue(key, value)) return; - else throw new Exception($"Dtsod[{key}] key not found"); + if(TrySetValue(key, value)) + return; + else + throw new Exception($"Dtsod[{key}] key not found"); } } @@ -49,12 +53,12 @@ namespace DTLib.Dtsod { try { - value = base[key]; + value=base[key]; return true; } - catch (KeyNotFoundException) + catch(KeyNotFoundException) { - value = null; + value=null; return false; } } @@ -62,10 +66,10 @@ namespace DTLib.Dtsod { try { - base[key] = value; + base[key]=value; return true; } - catch (KeyNotFoundException) + catch(KeyNotFoundException) { return false; } @@ -94,7 +98,8 @@ namespace DTLib.Dtsod { Dictionary parsed = new(); int i = 0; - for (; i < text.Length; i++) ReadName(); + for(; i()); + if(!parsed.ContainsKey(name)) + parsed.Add(name, new List()); parsed[name].Add(value); } - else parsed.Add(name, value); + else + parsed.Add(name, value); return; // строка, начинающаяся с # будет считаться комментом case '#': //ReadCommentLine(); break; case '}': - throw new Exception("Parse.ReadName() error: unexpected '}' at " + i + " char"); + throw new Exception("Parse.ReadName() error: unexpected '}' at "+i+" char"); // если $ перед названием параметра поставить, значение value добавится в лист с названием name case '$': DebugNoTime("w", text[i].ToString()); - if (defaultNameBuilder.ToString().Length != 0) throw new Exception("Parse.ReadName() error: unexpected '$' at " + i + " char"); - isListElem = true; + if(defaultNameBuilder.ToString().Length!=0) + throw new Exception("Parse.ReadName() error: unexpected '$' at "+i+" char"); + isListElem=true; break; case ';': - throw new Exception("Parse.ReadName() error: unexpected ';' at " + i + " char"); + throw new Exception("Parse.ReadName() error: unexpected ';' at "+i+" char"); default: DebugNoTime("w", text[i].ToString()); defaultNameBuilder.Append(text[i]); @@ -165,14 +173,14 @@ namespace DTLib.Dtsod i++; StringBuilder valueBuilder = new(); valueBuilder.Append('"'); - for (; text[i] != '"' || text[i - 1] == '\\'; i++) + for(; text[i]!='"'||text[i-1]=='\\'; i++) { DebugNoTime("gray", text[i].ToString()); valueBuilder.Append(text[i]); } valueBuilder.Append('"'); DebugNoTime("gray", text[i].ToString()); - type = ValueType.String; + type=ValueType.String; return valueBuilder.ToString(); } @@ -181,10 +189,10 @@ namespace DTLib.Dtsod i++; List output = new(); StringBuilder valueBuilder = new(); - for (; text[i] != ']'; i++) + for(; text[i]!=']'; i++) { DebugNoTime("c", text[i].ToString()); - switch (text[i]) + switch(text[i]) { case ' ': case '\t': @@ -201,13 +209,13 @@ namespace DTLib.Dtsod break; } } - if (valueBuilder.Length > 0) + if(valueBuilder.Length>0) { ParseValueToRightType(valueBuilder.ToString()); output.Add(value); } DebugNoTime("c", text[i].ToString()); - type = ValueType.List; + type=ValueType.List; return output; } @@ -216,10 +224,10 @@ namespace DTLib.Dtsod StringBuilder valueBuilder = new(); int balance = 1; i++; - for (; balance != 0; i++) + for(; balance!=0; i++) { DebugNoTime("y", text[i].ToString()); - switch (text[i]) + switch(text[i]) { case '"': valueBuilder.Append(ReadString()); @@ -227,7 +235,8 @@ namespace DTLib.Dtsod case '}': balance--; DebugNoTime("b", $"\nbalance -- = {balance}\n"); - if (balance != 0) valueBuilder.Append(text[i]); + if(balance!=0) + valueBuilder.Append(text[i]); break; case '{': balance++; @@ -240,7 +249,7 @@ namespace DTLib.Dtsod } } i--; // i++ в for выполняется даже когда balance == 0, то есть text[i] получается == ;, что ломает всё - type = ValueType.Complex; + type=ValueType.Complex; return Parse(valueBuilder.ToString()); } @@ -248,51 +257,54 @@ namespace DTLib.Dtsod { DebugNoTime("b", $"\nParseValueToRightType({stringValue})\n"); - switch (stringValue) + switch(stringValue) { // bool case "true": case "false": - value = stringValue.ToBool(); + value=stringValue.ToBool(); break; // null case "null": - value = null; + value=null; break; default: - if (stringValue.Contains('"')) value = stringValue.Remove(stringValue.Length - 1).Remove(0, 1); + if(stringValue.Contains('"')) + value=stringValue.Remove(stringValue.Length-1).Remove(0, 1); // double - else if (stringValue.Contains('.')) value = stringValue.ToDouble(); + else if(stringValue.Contains('.')) + value=stringValue.ToDouble(); // ushort; ulong; uint - else if (stringValue.Length > 2 && stringValue[stringValue.Length - 2] == 'u') + else if(stringValue.Length>2&&stringValue[stringValue.Length-2]=='u') { - switch (stringValue[stringValue.Length - 1]) + switch(stringValue[stringValue.Length-1]) { case 's': - value = stringValue.Remove(stringValue.Length - 2).ToUShort(); + value=stringValue.Remove(stringValue.Length-2).ToUShort(); break; case 'i': - value = stringValue.Remove(stringValue.Length - 2).ToUInt(); + value=stringValue.Remove(stringValue.Length-2).ToUInt(); break; case 'l': - value = stringValue.Remove(stringValue.Length - 2).ToULong(); + value=stringValue.Remove(stringValue.Length-2).ToULong(); break; default: - throw new Exception($"Dtsod.Parse.ReadValue() error: value= wrong type "); + throw new Exception($"Dtsod.Parse.ReadValue() error: value= wrong type "); }; } // short; long; int - else switch (stringValue[stringValue.Length - 1]) + else + switch(stringValue[stringValue.Length-1]) { case 's': - value = stringValue.Remove(stringValue.Length - 1).ToShort(); + value=stringValue.Remove(stringValue.Length-1).ToShort(); break; case 'l': - value = stringValue.Remove(stringValue.Length - 1).ToLong(); + value=stringValue.Remove(stringValue.Length-1).ToLong(); break; default: - value = stringValue.ToShort(); + value=stringValue.ToShort(); break; } break; @@ -301,10 +313,10 @@ namespace DTLib.Dtsod StringBuilder defaultValueBuilder = new(); DebugNoTime("m", "\nReadValue\n"); - for (; i < text.Length; i++) + for(; i pair in Parse(text)) + foreach(KeyValuePair pair in Parse(text)) Add(pair.Key, pair.Value); } public DtsodV23(Dictionary dict) { - foreach (KeyValuePair pair in dict) + foreach(KeyValuePair pair in dict) Add(pair.Key, pair.Value); } @@ -66,13 +66,17 @@ namespace DTLib.Dtsod { get { - if (TryGetValue(key, out dynamic value)) return value; - else throw new Exception($"Dtsod[{key}] key not found"); + if(TryGetValue(key, out dynamic value)) + return value; + else + throw new Exception($"Dtsod[{key}] key not found"); } set { - if (TrySetValue(key, value)) return; - else throw new Exception($"Dtsod[{key}] key not found"); + if(TrySetValue(key, value)) + return; + else + throw new Exception($"Dtsod[{key}] key not found"); } } @@ -81,12 +85,12 @@ namespace DTLib.Dtsod { try { - value = base[key].Value; + value=base[key].Value; return true; } - catch (KeyNotFoundException) + catch(KeyNotFoundException) { - value = null; + value=null; return false; } } @@ -95,12 +99,14 @@ namespace DTLib.Dtsod try { bool isList; - if (value is IList) isList = true; - else isList = false; - base[key] = new(base[key].Type, value, isList); + if(value is IList) + isList=true; + else + isList=false; + base[key]=new(base[key].Type, value, isList); return true; } - catch (KeyNotFoundException) + catch(KeyNotFoundException) { return false; } @@ -110,7 +116,8 @@ namespace DTLib.Dtsod { Dictionary parsed = new(); int i = 0; - for (; i < text.Length; i++) ReadName(); + for(; i(), isList)); + if(!parsed.ContainsKey(name)) + parsed.Add(name, new(type, new List(), isList)); parsed[name].Value.Add(value); } - else parsed.Add(name, new(type, value, isList)); + else + parsed.Add(name, new(type, value, isList)); return; // строка, начинающаяся с # будет считаться комментом case '#': //ReadCommentLine(); break; case '}': - throw new Exception("Parse.ReadName() error: unexpected '}' at " + i + " char"); + throw new Exception("Parse.ReadName() error: unexpected '}' at "+i+" char"); // если $ перед названием параметра поставить, значение value добавится в лист с названием name case '$': DebugNoTime("w", text[i].ToString()); - if (defaultNameBuilder.ToString().Length != 0) throw new Exception("Parse.ReadName() error: unexpected '$' at " + i + " char"); - isListElem = true; + if(defaultNameBuilder.ToString().Length!=0) + throw new Exception("Parse.ReadName() error: unexpected '$' at "+i+" char"); + isListElem=true; break; case ';': - throw new Exception("Parse.ReadName() error: unexpected ';' at " + i + " char"); + throw new Exception("Parse.ReadName() error: unexpected ';' at "+i+" char"); default: DebugNoTime("w", text[i].ToString()); defaultNameBuilder.Append(text[i]); @@ -174,7 +184,7 @@ namespace DTLib.Dtsod dynamic ReadValue(out ValueTypes outType, out bool isList) { ValueTypes type = ValueTypes.Unknown; - isList = false; + isList=false; dynamic value = null; string ReadString() @@ -182,14 +192,14 @@ namespace DTLib.Dtsod i++; StringBuilder valueBuilder = new(); valueBuilder.Append('"'); - for (; text[i] != '"' || text[i - 1] == '\\'; i++) + for(; text[i]!='"'||text[i-1]=='\\'; i++) { DebugNoTime("gray", text[i].ToString()); valueBuilder.Append(text[i]); } valueBuilder.Append('"'); DebugNoTime("gray", text[i].ToString()); - type = ValueTypes.String; + type=ValueTypes.String; return valueBuilder.ToString(); } @@ -198,10 +208,10 @@ namespace DTLib.Dtsod i++; List output = new(); StringBuilder valueBuilder = new(); - for (; text[i] != ']'; i++) + for(; text[i]!=']'; i++) { DebugNoTime("c", text[i].ToString()); - switch (text[i]) + switch(text[i]) { case ' ': case '\t': @@ -218,13 +228,13 @@ namespace DTLib.Dtsod break; } } - if (valueBuilder.Length > 0) + if(valueBuilder.Length>0) { ParseValueToRightType(valueBuilder.ToString()); output.Add(value); } DebugNoTime("c", text[i].ToString()); - type = ValueTypes.List; + type=ValueTypes.List; return output; } @@ -233,10 +243,10 @@ namespace DTLib.Dtsod StringBuilder valueBuilder = new(); int balance = 1; i++; - for (; balance != 0; i++) + for(; balance!=0; i++) { DebugNoTime("y", text[i].ToString()); - switch (text[i]) + switch(text[i]) { case '"': valueBuilder.Append(ReadString()); @@ -244,7 +254,8 @@ namespace DTLib.Dtsod case '}': balance--; DebugNoTime("b", $"\nbalance -- = {balance}\n"); - if (balance != 0) valueBuilder.Append(text[i]); + if(balance!=0) + valueBuilder.Append(text[i]); break; case '{': balance++; @@ -257,74 +268,75 @@ namespace DTLib.Dtsod } } i--; // i++ в for выполняется даже когда balance == 0, то есть text[i] получается == ;, что ломает всё - type = ValueTypes.Complex; + type=ValueTypes.Complex; return Parse(valueBuilder.ToString()); } void ParseValueToRightType(string stringValue) { DebugNoTime("b", $"\nParseValueToRightType({stringValue})\n"); - switch (stringValue) + switch(stringValue) { // bool case "true": case "false": - type = ValueTypes.Bool; - value = stringValue.ToBool(); + type=ValueTypes.Bool; + value=stringValue.ToBool(); break; // null case "null": - type = ValueTypes.Null; - value = null; + type=ValueTypes.Null; + value=null; break; default: - if (stringValue.Contains('"')) + if(stringValue.Contains('"')) { - type = ValueTypes.String; - value = stringValue.Remove(stringValue.Length - 1).Remove(0, 1); + type=ValueTypes.String; + value=stringValue.Remove(stringValue.Length-1).Remove(0, 1); } // double - else if (stringValue.Contains('.')) + else if(stringValue.Contains('.')) { - type = ValueTypes.Double; - value = stringValue.ToDouble(); + type=ValueTypes.Double; + value=stringValue.ToDouble(); } // ushort; ulong; uint - else if (stringValue.Length > 2 && stringValue[stringValue.Length - 2] == 'u') + else if(stringValue.Length>2&&stringValue[stringValue.Length-2]=='u') { - switch (stringValue[stringValue.Length - 1]) + switch(stringValue[stringValue.Length-1]) { case 's': - type = ValueTypes.UShort; - value = stringValue.Remove(stringValue.Length - 2).ToUShort(); + type=ValueTypes.UShort; + value=stringValue.Remove(stringValue.Length-2).ToUShort(); break; case 'i': - type = ValueTypes.UInt; - value = stringValue.Remove(stringValue.Length - 2).ToUInt(); + type=ValueTypes.UInt; + value=stringValue.Remove(stringValue.Length-2).ToUInt(); break; case 'l': - type = ValueTypes.ULong; - value = stringValue.Remove(stringValue.Length - 2).ToULong(); + type=ValueTypes.ULong; + value=stringValue.Remove(stringValue.Length-2).ToULong(); break; default: throw new Exception($"Dtsod.Parse.ReadValue() error: value <{stringValue}> has wrong type"); }; } // short; long; int - else switch (stringValue[stringValue.Length - 1]) + else + switch(stringValue[stringValue.Length-1]) { case 's': - type = ValueTypes.Short; - value = stringValue.Remove(stringValue.Length - 1).ToShort(); + type=ValueTypes.Short; + value=stringValue.Remove(stringValue.Length-1).ToShort(); break; case 'l': - type = ValueTypes.Long; - value = stringValue.Remove(stringValue.Length - 1).ToLong(); + type=ValueTypes.Long; + value=stringValue.Remove(stringValue.Length-1).ToLong(); break; default: - type = ValueTypes.Int; - value = stringValue.ToShort(); + type=ValueTypes.Int; + value=stringValue.ToShort(); break; } break; @@ -333,10 +345,10 @@ namespace DTLib.Dtsod StringBuilder defaultValueBuilder = new(); DebugNoTime("m", "\nReadValue\n"); - for (; i < text.Length; i++) + for(; i pair in newPart) + foreach(KeyValuePair pair in newPart) Add(pair.Key, pair.Value); } } diff --git a/EventHandlerAsync.cs b/EventHandlerAsync.cs index 13361dc..e5af840 100644 --- a/EventHandlerAsync.cs +++ b/EventHandlerAsync.cs @@ -2,5 +2,7 @@ namespace DTLib { +#pragma warning disable IDE1006 // Стили именования public delegate Task EventHandlerAsync(object sender, TEventArgs e); +#pragma warning restore IDE1006 // Стили именования } diff --git a/Filesystem/Directory.cs b/Filesystem/Directory.cs index 474443b..e5f08b1 100644 --- a/Filesystem/Directory.cs +++ b/Filesystem/Directory.cs @@ -10,10 +10,10 @@ namespace DTLib.Filesystem // создает папку, если её не существует public static void Create(string dir) { - if (!Directory.Exists(dir)) + if(!Directory.Exists(dir)) { // проверяет существование папки, в которой нужно создать dir - if (dir.Contains("\\") && !Directory.Exists(dir.Remove(dir.LastIndexOf('\\')))) + if(dir.Contains("\\")&&!Directory.Exists(dir.Remove(dir.LastIndexOf('\\')))) Create(dir.Remove(dir.LastIndexOf('\\'))); System.IO.Directory.CreateDirectory(dir); } @@ -22,13 +22,13 @@ namespace DTLib.Filesystem public static void Copy(string source_dir, string new_dir, bool owerwrite = false) { Create(new_dir); - List subdirs = new List(); + var subdirs = new List(); List files = GetAllFiles(source_dir, ref subdirs); - for (int i = 0; i < subdirs.Count; i++) + for(int i = 0; i conflicts, bool owerwrite = false) { - conflicts = new List(); + conflicts=new List(); var subdirs = new List(); - var files = GetAllFiles(source_dir, ref subdirs); + List files = GetAllFiles(source_dir, ref subdirs); Create(new_dir); - for (int i = 0; i < subdirs.Count; i++) + for(int i = 0; i have copied to <", "c", newfile, "b", ">\n'" }); } @@ -60,16 +61,18 @@ namespace DTLib.Filesystem public static void Delete(string dir) { var subdirs = new List(); - var files = GetAllFiles(dir, ref subdirs); - for (int i = 0; i < files.Count; i++) + List files = GetAllFiles(dir, ref subdirs); + for(int i = 0; i= 0; i--) + for(int i = subdirs.Count-1; i>=0; i--) { PublicLog.Log($"deleting {subdirs[i]}\n"); - if (Directory.Exists(subdirs[i])) System.IO.Directory.Delete(subdirs[i], true); + if(Directory.Exists(subdirs[i])) + System.IO.Directory.Delete(subdirs[i], true); } PublicLog.Log($"deleting {dir}\n"); - if (Directory.Exists(dir)) System.IO.Directory.Delete(dir, true); + if(Directory.Exists(dir)) + System.IO.Directory.Delete(dir, true); } public static string[] GetFiles(string dir) => System.IO.Directory.GetFiles(dir); @@ -79,15 +82,15 @@ namespace DTLib.Filesystem // выдает список всех файлов public static List GetAllFiles(string dir) { - List all_files = new List(); + var all_files = new List(); string[] cur_files = Directory.GetFiles(dir); - for (int i = 0; i < cur_files.Length; i++) + for(int i = 0; i\n" }); } string[] cur_subdirs = Directory.GetDirectories(dir); - for (int i = 0; i < cur_subdirs.Length; i++) + for(int i = 0; i\n" }); all_files.AddRange(GetAllFiles(cur_subdirs[i])); @@ -98,15 +101,15 @@ namespace DTLib.Filesystem // выдает список всех файлов и подпапок в папке public static List GetAllFiles(string dir, ref List all_subdirs) { - List all_files = new List(); + var all_files = new List(); string[] cur_files = Directory.GetFiles(dir); - for (int i = 0; i < cur_files.Length; i++) + for(int i = 0; i\n" }); } string[] cur_subdirs = Directory.GetDirectories(dir); - for (int i = 0; i < cur_subdirs.Length; i++) + for(int i = 0; i\n" }); @@ -119,13 +122,13 @@ namespace DTLib.Filesystem public static void GrantAccess(string fullPath) { - System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(fullPath); + var dirInfo = new System.IO.DirectoryInfo(fullPath); System.Security.AccessControl.DirectorySecurity dirSecurity = dirInfo.GetAccessControl(); dirSecurity.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule( new System.Security.Principal.SecurityIdentifier( System.Security.Principal.WellKnownSidType.WorldSid, null), System.Security.AccessControl.FileSystemRights.FullControl, - System.Security.AccessControl.InheritanceFlags.ObjectInherit | + System.Security.AccessControl.InheritanceFlags.ObjectInherit| System.Security.AccessControl.InheritanceFlags.ContainerInherit, System.Security.AccessControl.PropagationFlags.NoPropagateInherit, System.Security.AccessControl.AccessControlType.Allow)); diff --git a/Filesystem/File.cs b/Filesystem/File.cs index 0a9389c..54ee230 100644 --- a/Filesystem/File.cs +++ b/Filesystem/File.cs @@ -11,18 +11,21 @@ namespace DTLib.Filesystem // если файл не существует, создаёт файл, создаёт папки из его пути public static void Create(string file, bool delete_old = false) { - if (delete_old && File.Exists(file)) File.Delete(file); - if (!File.Exists(file)) + if(delete_old&&File.Exists(file)) + File.Delete(file); + if(!File.Exists(file)) { - if (file.Contains("\\")) Directory.Create(file.Remove(file.LastIndexOf('\\'))); - using var stream = System.IO.File.Create(file); + if(file.Contains("\\")) + Directory.Create(file.Remove(file.LastIndexOf('\\'))); + using System.IO.FileStream stream = System.IO.File.Create(file); stream.Close(); } } public static void Copy(string srcPath, string newPath, bool replace = false) { - if (!replace && Exists(newPath)) throw new Exception($"file <{newPath}> alredy exists"); + if(!replace&&Exists(newPath)) + throw new Exception($"file <{newPath}> alredy exists"); Create(newPath); WriteAllBytes(newPath, ReadAllBytes(srcPath)); } @@ -31,7 +34,7 @@ namespace DTLib.Filesystem public static byte[] ReadAllBytes(string file) { - using var stream = File.OpenRead(file); + using System.IO.FileStream stream = File.OpenRead(file); int size = GetSize(file); byte[] output = new byte[size]; stream.Read(output, 0, size); @@ -43,7 +46,7 @@ namespace DTLib.Filesystem public static void WriteAllBytes(string file, byte[] content) { - using var stream = File.OpenWrite(file); + using System.IO.FileStream stream = File.OpenWrite(file); stream.Write(content, 0, content.Length); stream.Close(); } @@ -52,7 +55,7 @@ namespace DTLib.Filesystem public static void AppendAllBytes(string file, byte[] content) { - using var stream = File.OpenAppend(file); + using System.IO.FileStream stream = File.OpenAppend(file); stream.Write(content, 0, content.Length); stream.Close(); } @@ -61,7 +64,8 @@ namespace DTLib.Filesystem public static System.IO.FileStream OpenRead(string file) { - if (!Exists(file)) throw new Exception($"file not found: <{file}>"); + if(!Exists(file)) + throw new Exception($"file not found: <{file}>"); return System.IO.File.OpenRead(file); } public static System.IO.FileStream OpenWrite(string file) diff --git a/Filesystem/OldFilework.cs b/Filesystem/OldFilework.cs index 2012d8d..67b2549 100644 --- a/Filesystem/OldFilework.cs +++ b/Filesystem/OldFilework.cs @@ -10,7 +10,7 @@ namespace DTLib.Filesystem // записывает текст в файл и закрывает файл public static void LogToFile(string logfile, string msg) { - lock (new object()) + lock(new object()) { File.AppendAllText(logfile, msg); } @@ -19,39 +19,41 @@ namespace DTLib.Filesystem // чтение параметров из конфига public static string ReadFromConfig(string configfile, string key) { - lock (new object()) + lock(new object()) { - key += ": "; + key+=": "; using var reader = new System.IO.StreamReader(configfile); - while (!reader.EndOfStream) + while(!reader.EndOfStream) { string st = reader.ReadLine(); - if (st.StartsWith(key)) + if(st.StartsWith(key)) { string value = ""; - for (int i = key.Length; i < st.Length; i++) + for(int i = key.Length; i rez = new List(); + var rez = new List(); rez.AddRange(input); rez.AddRange(salt); return sha256.ComputeHash(rez.ToArray()); @@ -29,18 +29,18 @@ namespace DTLib // хеш двух массивов зацикленный public byte[] HashCycled(byte[] input, byte[] salt, ushort cycles) { - for (uint i = 0; i < cycles; i++) + for(uint i = 0; i mainSocket = _mainSocket; + Socket MainSocket { get; init; } + public static bool debug = false; + public FSP(Socket _mainSocket) => MainSocket=_mainSocket; public uint BytesDownloaded = 0; public uint BytesUploaded = 0; @@ -27,9 +28,9 @@ namespace DTLib.Network Mutex.Execute(() => { Debug("b", $"requesting file download: {filePath_server}\n"); - mainSocket.SendPackage("requesting file download".ToBytes()); - mainSocket.SendPackage(filePath_server.ToBytes()); - }, out var exception); + MainSocket.SendPackage("requesting file download".ToBytes()); + MainSocket.SendPackage(filePath_server.ToBytes()); + }, out Exception exception); exception?.Throw(); DownloadFile(filePath_client); } @@ -47,9 +48,9 @@ namespace DTLib.Network Mutex.Execute(() => { Debug("b", $"requesting file download: {filePath_server}\n"); - mainSocket.SendPackage("requesting file download".ToBytes()); - mainSocket.SendPackage(filePath_server.ToBytes()); - }, out var exception); + MainSocket.SendPackage("requesting file download".ToBytes()); + MainSocket.SendPackage(filePath_server.ToBytes()); + }, out System.Exception exception); exception?.Throw(); return DownloadFileToMemory(); } @@ -68,72 +69,74 @@ namespace DTLib.Network { Mutex.Execute(() => { - BytesDownloaded = 0; - Filesize = SimpleConverter.ToString(mainSocket.GetPackage()).ToUInt(); - mainSocket.SendPackage("ready".ToBytes()); + BytesDownloaded=0; + Filesize=SimpleConverter.ToString(MainSocket.GetPackage()).ToUInt(); + MainSocket.SendPackage("ready".ToBytes()); int packagesCount = 0; byte[] buffer = new byte[5120]; - int fullPackagesCount = SimpleConverter.Truncate(Filesize / buffer.Length); + int fullPackagesCount = SimpleConverter.Truncate(Filesize/buffer.Length); // получение полных пакетов файла - for (byte n = 0; packagesCount < fullPackagesCount; packagesCount++) + for(byte n = 0; packagesCount 0) + if((Filesize-fileStream.Position)>0) { - mainSocket.SendPackage("remain request".ToBytes()); - buffer = mainSocket.GetPackage(); - BytesDownloaded += (uint)buffer.Length; + MainSocket.SendPackage("remain request".ToBytes()); + buffer=MainSocket.GetPackage(); + BytesDownloaded+=(uint)buffer.Length; fileStream.Write(buffer, 0, buffer.Length); } - }, out var exception); + }, out System.Exception exception); exception?.Throw(); - if (requiresFlushing) fileStream.Flush(); + if(requiresFlushing) + fileStream.Flush(); } // отдаёт файл с помощью FSP протокола public void UploadFile(string filePath) { - BytesUploaded = 0; + BytesUploaded=0; Debug("b", $"uploading file {filePath}\n"); - using var fileStream = File.OpenRead(filePath); - Filesize = File.GetSize(filePath).ToUInt(); + using System.IO.FileStream fileStream = File.OpenRead(filePath); + Filesize=File.GetSize(filePath).ToUInt(); Mutex.Execute(() => { - mainSocket.SendPackage(Filesize.ToString().ToBytes()); - mainSocket.GetAnswer("ready"); + MainSocket.SendPackage(Filesize.ToString().ToBytes()); + MainSocket.GetAnswer("ready"); byte[] buffer = new byte[5120]; int packagesCount = 0; - int fullPackagesCount = SimpleConverter.Truncate(Filesize / buffer.Length); + int fullPackagesCount = SimpleConverter.Truncate(Filesize/buffer.Length); // отправка полных пакетов файла - for (; packagesCount < fullPackagesCount; packagesCount++) + for(; packagesCount 0) + if((Filesize-fileStream.Position)>0) { - mainSocket.GetAnswer("remain request"); - buffer = new byte[(Filesize - fileStream.Position).ToInt()]; + MainSocket.GetAnswer("remain request"); + buffer=new byte[(Filesize-fileStream.Position).ToInt()]; fileStream.Read(buffer, 0, buffer.Length); - mainSocket.SendPackage(buffer); - BytesUploaded += (uint)buffer.Length; + MainSocket.SendPackage(buffer); + BytesUploaded+=(uint)buffer.Length; } - }, out var exception); + }, out System.Exception exception); exception?.Throw(); fileStream.Close(); Debug(new string[] { "g", $" uploaded {BytesUploaded} of {Filesize} bytes\n" }); @@ -141,34 +144,37 @@ namespace DTLib.Network public void DownloadByManifest(string dirOnServer, string dirOnClient, bool overwrite = false, bool delete_excess = false) { - if (!dirOnClient.EndsWith("\\")) dirOnClient += "\\"; - if (!dirOnServer.EndsWith("\\")) dirOnServer += "\\"; - Debug("b", "downloading manifest <", "c", dirOnServer + "manifest.dtsod", "b", ">\n"); - var manifest = new DtsodV23(SimpleConverter.ToString(DownloadFileToMemory(dirOnServer + "manifest.dtsod"))); + if(!dirOnClient.EndsWith("\\")) + dirOnClient+="\\"; + if(!dirOnServer.EndsWith("\\")) + dirOnServer+="\\"; + Debug("b", "downloading manifest <", "c", dirOnServer+"manifest.dtsod", "b", ">\n"); + var manifest = new DtsodV23(SimpleConverter.ToString(DownloadFileToMemory(dirOnServer+"manifest.dtsod"))); Debug("g", $"found {manifest.Values.Count} files in manifest\n"); var hasher = new Hasher(); - foreach (string fileOnServer in manifest.Keys) + foreach(string fileOnServer in manifest.Keys) { - string fileOnClient = dirOnClient + fileOnServer; + string fileOnClient = dirOnClient+fileOnServer; Debug("b", "file <", "c", fileOnClient, "b", ">... "); - if (!File.Exists(fileOnClient)) + if(!File.Exists(fileOnClient)) { DebugNoTime("y", "doesn't exist\n"); - DownloadFile(dirOnServer + fileOnServer, fileOnClient); + DownloadFile(dirOnServer+fileOnServer, fileOnClient); } - else if (overwrite && hasher.HashFile(fileOnClient).HashToString() != manifest[fileOnServer]) + else if(overwrite&&hasher.HashFile(fileOnClient).HashToString()!=manifest[fileOnServer]) { DebugNoTime("y", "outdated\n"); - DownloadFile(dirOnServer + fileOnServer, fileOnClient); + DownloadFile(dirOnServer+fileOnServer, fileOnClient); } - else DebugNoTime("g", "without changes\n"); + else + DebugNoTime("g", "without changes\n"); } // удаление лишних файлов - if (delete_excess) + if(delete_excess) { - foreach (string file in Directory.GetAllFiles(dirOnClient)) + foreach(string file in Directory.GetAllFiles(dirOnClient)) { - if (!manifest.ContainsKey(file.Remove(0, dirOnClient.Length))) + if(!manifest.ContainsKey(file.Remove(0, dirOnClient.Length))) { Debug("y", $"deleting excess file: {file}\n"); File.Delete(file); @@ -179,31 +185,35 @@ namespace DTLib.Network public static void CreateManifest(string dir) { - if (!dir.EndsWith("\\")) dir += "\\"; + if(!dir.EndsWith("\\")) + dir+="\\"; Log($"b", $"creating manifest of {dir}\n"); StringBuilder manifestBuilder = new(); Hasher hasher = new(); - if (Directory.GetFiles(dir).Contains(dir + "manifest.dtsod")) File.Delete(dir + "manifest.dtsod"); - foreach (string _file in Directory.GetAllFiles(dir)) + if(Directory.GetFiles(dir).Contains(dir+"manifest.dtsod")) + File.Delete(dir+"manifest.dtsod"); + foreach(string _file in Directory.GetAllFiles(dir)) { string file = _file.Remove(0, dir.Length); manifestBuilder.Append(file); manifestBuilder.Append(": \""); - byte[] hash = hasher.HashFile(dir + file); + byte[] hash = hasher.HashFile(dir+file); manifestBuilder.Append(hash.HashToString()); manifestBuilder.Append("\";\n"); } Debug($"g", $" manifest of {dir} created\n"); - File.WriteAllText(dir + "manifest.dtsod", manifestBuilder.ToString()); + File.WriteAllText(dir+"manifest.dtsod", manifestBuilder.ToString()); } static void Debug(params string[] msg) { - if (debug) Log(msg); + if(debug) + Log(msg); } static void DebugNoTime(params string[] msg) { - if (debug) LogNoTime(msg); + if(debug) + LogNoTime(msg); } } } diff --git a/Network/OldNetwork.cs b/Network/OldNetwork.cs index 977629b..48998c9 100644 --- a/Network/OldNetwork.cs +++ b/Network/OldNetwork.cs @@ -16,17 +16,17 @@ namespace DTLib.Network // пингует айпи с помощью встроенной в винду проги, возвращает задержку public static string PingIP(string address) { - Process proc = new Process(); - proc.StartInfo.FileName = "cmd.exe"; - proc.StartInfo.Arguments = "/c @echo off & chcp 65001 >nul & ping -n 5 " + address; - proc.StartInfo.CreateNoWindow = true; - proc.StartInfo.UseShellExecute = false; - proc.StartInfo.RedirectStandardOutput = true; + var proc = new Process(); + proc.StartInfo.FileName="cmd.exe"; + proc.StartInfo.Arguments="/c @echo off & chcp 65001 >nul & ping -n 5 "+address; + proc.StartInfo.CreateNoWindow=true; + proc.StartInfo.UseShellExecute=false; + proc.StartInfo.RedirectStandardOutput=true; proc.Start(); - var outStream = proc.StandardOutput; - var rezult = outStream.ReadToEnd(); - rezult = rezult.Remove(0, rezult.LastIndexOf('=') + 2); - return rezult.Remove(rezult.Length - 4); + System.IO.StreamReader outStream = proc.StandardOutput; + string rezult = outStream.ReadToEnd(); + rezult=rezult.Remove(0, rezult.LastIndexOf('=')+2); + return rezult.Remove(rezult.Length-4); } } diff --git a/Network/Package.cs b/Network/Package.cs index f6cc7b3..ee1c234 100644 --- a/Network/Package.cs +++ b/Network/Package.cs @@ -16,20 +16,21 @@ namespace DTLib.Network int packageSize = 0; byte[] data = new byte[2]; // цикл выполняется пока не пройдёт 2000 мс - for (ushort s = 0; s < 400; s += 1) + for(ushort s = 0; s<400; s+=1) { - if (packageSize == 0 && socket.Available >= 2) + if(packageSize==0&&socket.Available>=2) { socket.Receive(data, data.Length, 0); - packageSize = data.ToInt(); + packageSize=data.ToInt(); } - if (packageSize != 0 && socket.Available >= packageSize) + if(packageSize!=0&&socket.Available>=packageSize) { - data = new byte[packageSize]; + data=new byte[packageSize]; socket.Receive(data, data.Length, 0); return data; } - else Thread.Sleep(5); + else + Thread.Sleep(5); } throw new Exception($"GetPackage() error: timeout. socket.Available={socket.Available}\n"); } @@ -37,11 +38,14 @@ namespace DTLib.Network // отправляет пакет public static void SendPackage(this Socket socket, byte[] data) { - if (data.Length > 65536) throw new Exception($"SendPackage() error: package is too big ({data.Length} bytes)"); - if (data.Length == 0) throw new Exception($"SendPackage() error: package has zero size"); + if(data.Length>65536) + throw new Exception($"SendPackage() error: package is too big ({data.Length} bytes)"); + if(data.Length==0) + throw new Exception($"SendPackage() error: package has zero size"); var list = new List(); byte[] packageSize = data.Length.ToBytes(); - if (packageSize.Length == 1) list.Add(0); + if(packageSize.Length==1) + list.Add(0); list.AddRange(packageSize); list.AddRange(data); socket.Send(list.ToArray()); @@ -51,8 +55,9 @@ namespace DTLib.Network // получает пакет и выбрасывает исключение, если пакет не соответствует образцу public static void GetAnswer(this Socket socket, string answer) { - var rec = SimpleConverter.ToString(socket.GetPackage()); - if (rec != answer) throw new Exception($"GetAnswer() error: invalid answer: <{rec}>"); + string rec = SimpleConverter.ToString(socket.GetPackage()); + if(rec!=answer) + throw new Exception($"GetAnswer() error: invalid answer: <{rec}>"); } public static byte[] RequestPackage(this Socket socket, byte[] request) diff --git a/Reactive/ReactiveListener.cs b/Reactive/ReactiveListener.cs index 04ef3c1..9b4732b 100644 --- a/Reactive/ReactiveListener.cs +++ b/Reactive/ReactiveListener.cs @@ -11,25 +11,21 @@ namespace DTLib.Reactive public ReactiveListener(IEnumerable> streams) : base(streams) { } public Action ElementAddedHandler; - public void SetHandler(Action handler) => ReactiveWorkerMutex.Execute(() => { ElementAddedHandler = handler; }); + public void SetHandler(Action handler) => ReactiveWorkerMutex.Execute(() => ElementAddedHandler=handler); public async Task ElementAdded(object s, T e) => await Task.Run(() => ElementAddedHandler?.Invoke(s, e)); - public override void Join(ReactiveStream stream) - { + public override void Join(ReactiveStream stream) => ReactiveWorkerMutex.Execute(() => { Streams.Add(stream); - stream.ElementAdded += ElementAdded; + stream.ElementAdded+=ElementAdded; }); - } - public override void Leave(ReactiveStream stream) - { + public override void Leave(ReactiveStream stream) => ReactiveWorkerMutex.Execute(() => { Streams.Remove(stream); - stream.ElementAdded -= ElementAdded; + stream.ElementAdded-=ElementAdded; }); - } } } diff --git a/Reactive/ReactiveProvider.cs b/Reactive/ReactiveProvider.cs index 3d487a0..2ab6d65 100644 --- a/Reactive/ReactiveProvider.cs +++ b/Reactive/ReactiveProvider.cs @@ -11,27 +11,18 @@ namespace DTLib.Reactive public ReactiveProvider(IEnumerable> streams) : base(streams) { } event Action AnnounceEvent; - public void Announce(T e) - { - ReactiveWorkerMutex.Execute(() => AnnounceEvent.Invoke(e)); - } + public void Announce(T e) => ReactiveWorkerMutex.Execute(() => AnnounceEvent.Invoke(e)); - public override void Join(ReactiveStream stream) - { - ReactiveWorkerMutex.Execute(() => - { - Streams.Add(stream); - AnnounceEvent += stream.Add; - }); - } + public override void Join(ReactiveStream stream) => ReactiveWorkerMutex.Execute(() => + { + Streams.Add(stream); + AnnounceEvent+=stream.Add; + }); - public override void Leave(ReactiveStream stream) - { - ReactiveWorkerMutex.Execute(() => - { - Streams.Remove(stream); - AnnounceEvent -= stream.Add; - }); - } + public override void Leave(ReactiveStream stream) => ReactiveWorkerMutex.Execute(() => + { + Streams.Remove(stream); + AnnounceEvent-=stream.Add; + }); } } diff --git a/Reactive/ReactiveStream.cs b/Reactive/ReactiveStream.cs index ed97520..aec4098 100644 --- a/Reactive/ReactiveStream.cs +++ b/Reactive/ReactiveStream.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; namespace DTLib.Reactive { @@ -8,7 +7,7 @@ namespace DTLib.Reactive List Storage = new(); public event EventHandlerAsync ElementAdded; SafeMutex StorageMutex = new(); - public int Length { get { return StorageMutex.Execute(() => Storage.Count); } } + public int Length => StorageMutex.Execute(() => Storage.Count); public ReactiveStream() { } diff --git a/Reactive/ReactiveWorker.cs b/Reactive/ReactiveWorker.cs index 7d36e42..fe7e98c 100644 --- a/Reactive/ReactiveWorker.cs +++ b/Reactive/ReactiveWorker.cs @@ -12,7 +12,7 @@ namespace DTLib.Reactive public ReactiveWorker(ReactiveStream stream) => Join(stream); public ReactiveWorker(IEnumerable> streams) => - ReactiveWorkerMutex.Execute(() => { foreach (var stream in streams) Join(stream); }); + ReactiveWorkerMutex.Execute(() => { foreach(ReactiveStream stream in streams) Join(stream); }); public abstract void Join(ReactiveStream stream); public abstract void Leave(ReactiveStream stream); diff --git a/SafeMutex.cs b/SafeMutex.cs index 5eaa2ae..4578927 100644 --- a/SafeMutex.cs +++ b/SafeMutex.cs @@ -13,13 +13,14 @@ namespace DTLib { try { - exception = null; + exception=null; Execute(action); } - catch (Exception ex) + catch(Exception ex) { - exception = ex; - if (!isReleased) Mutex.ReleaseMutex(); + exception=ex; + if(!isReleased) + Mutex.ReleaseMutex(); } } @@ -28,14 +29,14 @@ namespace DTLib Mutex.WaitOne(); action(); Mutex.ReleaseMutex(); - isReleased = true; + isReleased=true; } public T Execute(Func action) { Mutex.WaitOne(); - var rezult = action(); + T rezult = action(); Mutex.ReleaseMutex(); - isReleased = true; + isReleased=true; return rezult; } } diff --git a/SimpleConverter.cs b/SimpleConverter.cs index 787d9a9..4723c6e 100644 --- a/SimpleConverter.cs +++ b/SimpleConverter.cs @@ -13,18 +13,20 @@ namespace DTLib // эти методы работают как надо, в отличии от стандартных, которые иногда дуркуют public static bool StartsWith(this byte[] source, byte[] startsWith) { - for (int i = 0; i < startsWith.Length; i++) + for(int i = 0; i(this T[] input, int startIndex, int count) { - List list = input.ToList(); + var list = input.ToList(); list.RemoveRange(startIndex, count); return list.ToArray(); } - public static T[] RemoveRange(this T[] input, int startIndex) => input.RemoveRange(startIndex, input.Length - startIndex); + public static T[] RemoveRange(this T[] input, int startIndex) => input.RemoveRange(startIndex, input.Length-startIndex); // метод как у листов public static bool Contains(this T[] array, T value) { - for (int i = 0; i < array.Length; i++) - if (array[i].Equals(value)) return true; + for(int i = 0; i output = new(); - while (num != 0) + while(num!=0) { - output.Add(ToByte(num % 256)); - num = Truncate(num / 256); + output.Add(ToByte(num%256)); + num=Truncate(num/256); } output.Reverse(); return output.ToArray(); @@ -98,7 +102,7 @@ namespace DTLib public static string HashToString(this byte[] hash) { var builder = new StringBuilder(); - for (int i = 0; i < hash.Length; i++) + for(int i = 0; i(this IEnumerable collection, string separator) { StringBuilder builder = new(); - foreach (T elem in collection) + foreach(T elem in collection) { builder.Append(elem.ToString()); builder.Append(separator); } - builder.Remove(builder.Length - separator.Length, separator.Length); + builder.Remove(builder.Length-separator.Length, separator.Length); return builder.ToString(); } public static string MergeToString(this IEnumerable collection) { StringBuilder builder = new(); - foreach (T elem in collection) + foreach(T elem in collection) builder.Append(elem.ToString()); return builder.ToString(); } @@ -134,7 +138,7 @@ namespace DTLib public static string Multiply(this string input, int howMany) { StringBuilder b = new(); - for (int i = 0; i < howMany; i++) + for(int i = 0; i - { - do - { - Thread.Sleep(delay); - method(); - } while (Repeat); - }); + Repeat=repeat; + TimerThread=new Thread(() => + { + do + { + Thread.Sleep(delay); + method(); + } while(Repeat); + }); } public void Start() => TimerThread.Start(); @@ -30,7 +30,7 @@ namespace DTLib // завершение потока public void Stop() { - Repeat = false; + Repeat=false; TimerThread.Abort(); } } diff --git a/XXHash.cs b/XXHash.cs index 08c7c24..e826796 100644 --- a/XXHash.cs +++ b/XXHash.cs @@ -28,39 +28,39 @@ namespace DTLib static XXHash32() { - if (BitConverter.IsLittleEndian) + if(BitConverter.IsLittleEndian) { - FuncGetLittleEndianUInt32 = new Func((x, i) => - { - unsafe - { - fixed (byte* array = x) - { - return *(uint*)(array + i); - } - } - }); - FuncGetFinalHashUInt32 = new Func(i => (i & 0x000000FFU) << 24 | (i & 0x0000FF00U) << 8 | (i & 0x00FF0000U) >> 8 | (i & 0xFF000000U) >> 24); + FuncGetLittleEndianUInt32=new Func((x, i) => + { + unsafe + { + fixed(byte* array = x) + { + return *(uint*)(array+i); + } + } + }); + FuncGetFinalHashUInt32=new Func(i => (i&0x000000FFU)<<24|(i&0x0000FF00U)<<8|(i&0x00FF0000U)>>8|(i&0xFF000000U)>>24); } else { - FuncGetLittleEndianUInt32 = new Func((x, i) => - { - unsafe - { - fixed (byte* array = x) - { - return (uint)(array[i++] | (array[i++] << 8) | (array[i++] << 16) | (array[i] << 24)); - } - } - }); - FuncGetFinalHashUInt32 = new Func(i => i); + FuncGetLittleEndianUInt32=new Func((x, i) => + { + unsafe + { + fixed(byte* array = x) + { + return (uint)(array[i++]|(array[i++]<<8)|(array[i++]<<16)|(array[i]<<24)); + } + } + }); + FuncGetFinalHashUInt32=new Func(i => i); } } // Creates an instance of class by default seed(0). // - public static new XXHash32 Create() => new XXHash32(); + public static new XXHash32 Create() => new(); // Initializes a new instance of the class by default seed(0). public XXHash32() => Initialize(0); @@ -71,7 +71,7 @@ namespace DTLib // Gets the value of the computed hash code. // Hash computation has not yet completed. - public uint HashUInt32 => State == 0 ? _Hash32 : throw new InvalidOperationException("Hash computation has not yet completed."); + public uint HashUInt32 => State==0 ? _Hash32 : throw new InvalidOperationException("Hash computation has not yet completed."); // Gets or sets the value of seed used by xxHash32 algorithm. // Hash computation has not yet completed. @@ -80,10 +80,11 @@ namespace DTLib get => _Seed32; set { - if (value != _Seed32) + if(value!=_Seed32) { - if (State != 0) throw new InvalidOperationException("Hash computation has not yet completed."); - _Seed32 = value; + if(State!=0) + throw new InvalidOperationException("Hash computation has not yet completed."); + _Seed32=value; Initialize(); } } @@ -92,10 +93,10 @@ namespace DTLib // Initializes this instance for new hash computing. public override void Initialize() { - _ACC32_1 = _Seed32 + PRIME32_1 + PRIME32_2; - _ACC32_2 = _Seed32 + PRIME32_2; - _ACC32_3 = _Seed32 + 0; - _ACC32_4 = _Seed32 - PRIME32_1; + _ACC32_1=_Seed32+PRIME32_1+PRIME32_2; + _ACC32_2=_Seed32+PRIME32_2; + _ACC32_3=_Seed32+0; + _ACC32_4=_Seed32-PRIME32_1; } // Routes data written to the object into the hash algorithm for computing the hash. @@ -104,29 +105,30 @@ namespace DTLib // The number of bytes in the byte array to use as data. protected override void HashCore(byte[] array, int ibStart, int cbSize) { - if (State != 1) State = 1; - var size = cbSize - ibStart; - _RemainingLength = size & 15; - if (cbSize >= 16) + if(State!=1) + State=1; + int size = cbSize-ibStart; + _RemainingLength=size&15; + if(cbSize>=16) { - var limit = size - _RemainingLength; + int limit = size-_RemainingLength; do { - _ACC32_1 = Round32(_ACC32_1, FuncGetLittleEndianUInt32(array, ibStart)); - ibStart += 4; - _ACC32_2 = Round32(_ACC32_2, FuncGetLittleEndianUInt32(array, ibStart)); - ibStart += 4; - _ACC32_3 = Round32(_ACC32_3, FuncGetLittleEndianUInt32(array, ibStart)); - ibStart += 4; - _ACC32_4 = Round32(_ACC32_4, FuncGetLittleEndianUInt32(array, ibStart)); - ibStart += 4; - } while (ibStart < limit); + _ACC32_1=Round32(_ACC32_1, FuncGetLittleEndianUInt32(array, ibStart)); + ibStart+=4; + _ACC32_2=Round32(_ACC32_2, FuncGetLittleEndianUInt32(array, ibStart)); + ibStart+=4; + _ACC32_3=Round32(_ACC32_3, FuncGetLittleEndianUInt32(array, ibStart)); + ibStart+=4; + _ACC32_4=Round32(_ACC32_4, FuncGetLittleEndianUInt32(array, ibStart)); + ibStart+=4; + } while(ibStartThe computed hash code. protected override byte[] HashFinal() { - if (_TotalLength >= 16) + if(_TotalLength>=16) { - _Hash32 = RotateLeft32(_ACC32_1, 1) + RotateLeft32(_ACC32_2, 7) + RotateLeft32(_ACC32_3, 12) + RotateLeft32(_ACC32_4, 18); + _Hash32=RotateLeft32(_ACC32_1, 1)+RotateLeft32(_ACC32_2, 7)+RotateLeft32(_ACC32_3, 12)+RotateLeft32(_ACC32_4, 18); } else { - _Hash32 = _Seed32 + PRIME32_5; + _Hash32=_Seed32+PRIME32_5; } - _Hash32 += (uint)_TotalLength; - while (_RemainingLength >= 4) + _Hash32+=(uint)_TotalLength; + while(_RemainingLength>=4) { - _Hash32 = RotateLeft32(_Hash32 + FuncGetLittleEndianUInt32(_CurrentArray, _CurrentIndex) * PRIME32_3, 17) * PRIME32_4; - _CurrentIndex += 4; - _RemainingLength -= 4; + _Hash32=RotateLeft32(_Hash32+FuncGetLittleEndianUInt32(_CurrentArray, _CurrentIndex)*PRIME32_3, 17)*PRIME32_4; + _CurrentIndex+=4; + _RemainingLength-=4; } unsafe { - fixed (byte* arrayPtr = _CurrentArray) + fixed(byte* arrayPtr = _CurrentArray) { - while (_RemainingLength-- >= 1) + while(_RemainingLength-->=1) { - _Hash32 = RotateLeft32(_Hash32 + arrayPtr[_CurrentIndex++] * PRIME32_5, 11) * PRIME32_1; + _Hash32=RotateLeft32(_Hash32+arrayPtr[_CurrentIndex++]*PRIME32_5, 11)*PRIME32_1; } } } - _Hash32 = (_Hash32 ^ (_Hash32 >> 15)) * PRIME32_2; - _Hash32 = (_Hash32 ^ (_Hash32 >> 13)) * PRIME32_3; - _Hash32 ^= _Hash32 >> 16; - _TotalLength = State = 0; + _Hash32=(_Hash32^(_Hash32>>15))*PRIME32_2; + _Hash32=(_Hash32^(_Hash32>>13))*PRIME32_3; + _Hash32^=_Hash32>>16; + _TotalLength=State=0; return BitConverter.GetBytes(FuncGetFinalHashUInt32(_Hash32)); } - private static uint Round32(uint input, uint value) => RotateLeft32(input + (value * PRIME32_2), 13) * PRIME32_1; + private static uint Round32(uint input, uint value) => RotateLeft32(input+(value*PRIME32_2), 13)*PRIME32_1; - private static uint RotateLeft32(uint value, int count) => (value << count) | (value >> (32 - count)); + private static uint RotateLeft32(uint value, int count) => (value<>(32-count)); private void Initialize(uint seed) { - HashSizeValue = 32; - _Seed32 = seed; + HashSizeValue=32; + _Seed32=seed; Initialize(); } }