diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..b872f8f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +[*.cs] + +# IDE0058: Значение выражения никогда не используется +dotnet_diagnostic.IDE0058.severity = none + +# IDE0008: Использование явного типа +dotnet_diagnostic.IDE0008.severity = none + +# IDE0040: Добавьте модификаторы доступности +dotnet_diagnostic.IDE0040.severity = none + +# Default severity for analyzer diagnostics with category 'Style' +dotnet_analyzer_diagnostic.category-Style.severity = none diff --git a/.old 0/dtlauncher-client/App.config b/.old 0/dtlauncher-client/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/.old 0/dtlauncher-client/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.old 0/dtlauncher-client/Program.cs b/.old 0/dtlauncher-client/Program.cs new file mode 100644 index 0000000..211d681 --- /dev/null +++ b/.old 0/dtlauncher-client/Program.cs @@ -0,0 +1,153 @@ +using DTLib; +using System; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace dtlauncher_client +{ + class Program + { + static ConsoleGUI gui = new ConsoleGUI(90, 30); + static Socket mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + static string logfile = $"logs\\client-{DateTime.UtcNow}.log".Replace(':', '-').Replace(' ', '_'); + static bool enter = false; + + static void Main() + { + try + { + Console.Title = "dtlauncher"; + gui.ReadFromFile("gui\\start_tab.gui"); + gui.ShowAll(); + NetWork.Log += Log; + // подключение к серверу + /*mainSocket.Connect(new IPEndPoint(Dns.GetHostAddresses( + FileWork.ReadFromConfig("client.cfg", "central server ip"))[0], + Convert.ToInt32(FileWork.ReadFromConfig("client.cfg", "central server port")))); + mainSocket.ReceiveTimeout = 5000; + gui.ChangeLine(3, 4, 'y', "trying to connect to the main server..."); + string recieved = mainSocket.Request("new user connection try").ToStr(); + if (recieved != "new user connection created") + throw new Exception("can't connect to the main server"); + gui.ChangeLine(3, 5, 'g', "connected to the main server"); + //NetWork.RequestServersList(mainSocket); + gui.ResetCursor();*/ + Input(); + } + catch (Exception e) + { + Log("r", "\nerror:\n" + e.Message + "\n" + e.StackTrace + '\n'); + Console.ReadLine(); + } + } + + static string inputText = ""; + static void Input() + { + while (true) + { + ConsoleKeyInfo readKeyResult = Console.ReadKey(true); // Считывание ввода + switch (readKeyResult.Key) + { + case ConsoleKey.F1: + gui.ReadFromFile("gui\\files_tab.gui"); + for (sbyte i = 3; i < 89; i++) + gui.ChangeColor(i, 1, 'w'); + for (sbyte i = 3; i < 13; i++) + gui.ChangeColor(i, 1, 'c'); + gui.UpdateAll(); + break; + case ConsoleKey.F2: + gui.ReadFromFile("gui\\servers_tab.gui"); + for (sbyte i = 3; i < 89; i++) + gui.ChangeColor(i, 1, 'w'); + for (sbyte i = 19; i < 31; i++) + gui.ChangeColor(i, 1, 'c'); + gui.UpdateAll(); + break; + case ConsoleKey.F3: + gui.ReadFromFile("gui\\settings_tab.gui"); + for (sbyte i = 3; i < 89; i++) + gui.ChangeColor(i, 1, 'w'); + for (sbyte i = 37; i < 50; i++) + gui.ChangeColor(i, 1, 'c'); + gui.UpdateAll(); + break; + case ConsoleKey.F4: + return; + case ConsoleKey.F5: + Console.Clear(); + gui.ShowAll(); + break; + case ConsoleKey.F6: + break; + /*case ConsoleKey.F7: + break; + case ConsoleKey.F8: + break; + case ConsoleKey.F9: + break; + case ConsoleKey.F10: + break; + case ConsoleKey.F11: + break; + case ConsoleKey.F12: + break; + case ConsoleKey.UpArrow: + break; + case ConsoleKey.DownArrow: + break; + case ConsoleKey.LeftArrow: + break; + case ConsoleKey.RightArrow: + break; + case ConsoleKey.PageUp: + break; + case ConsoleKey.PageDown: + break; + case ConsoleKey.Home: + break; + case ConsoleKey.End: + break; + case ConsoleKey.Escape: + break; + case ConsoleKey.Enter: + enter = true; + break; + case ConsoleKey.Backspace: + if (inputText.Length > 0) + inputText = inputText.Remove(inputText.Length - 1); + break;*/ + default: + inputText += readKeyResult.KeyChar; + break; + } + } + } + static void Log(string color, string msg) + { + ColoredText.WriteColored(color, msg); + FileWork.Log(logfile, msg); + } + + static void Log(string[] input) + { + if (input.Length % 2 == 0) + { + ColoredText.WriteColored(input); + string str = ""; + for (ushort i = 0; i < input.Length; i++) + { + str += input[++i]; + } + FileWork.Log(logfile, str); + } + else + { + throw new Exception("error in Log(): every text string must have color string before"); + } + } + } +} diff --git a/.old 0/dtlauncher-client/Properties/AssemblyInfo.cs b/.old 0/dtlauncher-client/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a46c9ad --- /dev/null +++ b/.old 0/dtlauncher-client/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанные с этой сборкой. +[assembly: AssemblyTitle("dtlauncher-client")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("dtlauncher-client")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// из модели COM задайте для атрибута ComVisible этого типа значение true. +[assembly: ComVisible(false)] + +// Следующий GUID представляет идентификатор typelib, если этот проект доступен из модели COM +[assembly: Guid("eab95dec-0d9b-4e17-8875-0159358ac240")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Номер редакции +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/.old 0/dtlauncher-client/dtlauncher-client.csproj b/.old 0/dtlauncher-client/dtlauncher-client.csproj new file mode 100644 index 0000000..541ab01 --- /dev/null +++ b/.old 0/dtlauncher-client/dtlauncher-client.csproj @@ -0,0 +1,52 @@ + + + + + Debug + AnyCPU + {EAB95DEC-0D9B-4E17-8875-0159358AC240} + Exe + dtlauncher_client + dtlauncher-client + v4.8 + 512 + true + true + + + AnyCPU + none + true + bin\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + {ce793497-2d5c-42d8-b311-e9b32af9cdfb} + DTLib + + + + + del /f /q dtlauncher-client.exe.config + + \ No newline at end of file diff --git a/.old 0/dtlauncher-server/App.config b/.old 0/dtlauncher-server/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/.old 0/dtlauncher-server/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.old 0/dtlauncher-server/Program.cs b/.old 0/dtlauncher-server/Program.cs new file mode 100644 index 0000000..f0e9b2d --- /dev/null +++ b/.old 0/dtlauncher-server/Program.cs @@ -0,0 +1,145 @@ +using DTLib; +using System; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using static DTLib.NetWork; + +namespace dtlauncher_server +{ + class Program + { + static ConsoleGUI gui = new ConsoleGUI(90, 30); + static string logfile = $"logs\\client-{DateTime.UtcNow}.log".Replace(':', '-').Replace(' ', '_'); + static Socket mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + //static Dictionary users = new Dictionary(); + + static void Main(string[] args) + { + while (true) + { + try + { + Console.Title = "dtlauncher server"; + gui.ReadFromFile("gui\\main.gui"); + gui.ShowAll(); + NetWork.Log += Log; + Log("b", $"<{FileWork.ReadFromConfig("server.cfg", "server ip")}> : <{Convert.ToInt32(FileWork.ReadFromConfig("server.cfg", "server port"))}>\n"); + mainSocket.Bind(new IPEndPoint(IPAddress.Parse( + FileWork.ReadFromConfig("server.cfg", "server ip")), + Convert.ToInt32(FileWork.ReadFromConfig("server.cfg", "server port")))); + Log("g", "server started succesfully\n"); + //Thread userCheckThread = new Thread(CloseUnusedUserThreads); + //userCheckThread.Start(); + try + { + mainSocket.Listen(200); + while (true) + { + var userSocket = mainSocket.Accept(); + var userThread = new Thread(new ParameterizedThreadStart(UserStart)); + //users.Add(userSocket, userThread); + userThread.Start(userSocket); + } + } + catch (Exception ex) + { + Log("r", $"handler error:\n message:\n {ex.Message}\nmethod:\n {ex.TargetSite}\n"); + } + } + catch (Exception ex) + { + if (mainSocket.IsBound) mainSocket.CloseSocket(); + Log("r", $"Main() error:\n message:\n {ex.Message}\nmethod:\n {ex.TargetSite}\n"); + } + Thread.Sleep(1500); + } + } + + static void Log(string color, string msg) + { + ColoredText.WriteColored(color, msg); + FileWork.Log(logfile, msg); + } + + static void Log(string[] input) + { + if (input.Length % 2 == 0) + { + ColoredText.WriteColored(input); + string str = ""; + for (ushort i = 0; i < input.Length; i++) + { + str += input[++i]; + } + FileWork.Log(logfile, str); + } + else + { + throw new Exception("error in Log(): every text string must have color string before"); + } + } + + static void UserStart(dynamic _handlerSocket) + { + Socket handlerSocket = (Socket)_handlerSocket; + try + { + string recieved = handlerSocket.GetData().ToStr(); + if (recieved == "new user connection try") + { + handlerSocket.Send("new user connection created".ToBytes()); + while (true) + { + recieved = handlerSocket.GetData().ToStr(); + switch (recieved) + { + // ответ на NetWork.Ping() + case "ping": + handlerSocket.Send("pong".ToBytes()); + break; + // отправка списка активных серверов + case "requesting servers list": + + break; + case "requesting file": + recieved = handlerSocket.GetData().ToStr(); + break; + default: + throw new Exception("unknown request: " + recieved); + } + } + } + + else + { + throw new Exception("incorrect connection try"); + } + + } + catch (Exception ex) + { + Log("y", $"UserStart() error:\n message:\n {ex.Message}\n"); + handlerSocket.CloseSocket(); + Thread.CurrentThread.Abort(); + } + } + + /*static void CloseUnusedUserThreads() + { + while (true) + { + foreach (Socket s in users.Keys) + { + if (!NetWork.Ping(s)) + { + Log("y", "closing unused user thread\n"); + users[s].Abort(); + users.Remove(s); + } + } + Thread.Sleep(300000); + } + }*/ + } +} diff --git a/.old 0/dtlauncher-server/Properties/AssemblyInfo.cs b/.old 0/dtlauncher-server/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..13ba653 --- /dev/null +++ b/.old 0/dtlauncher-server/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанные с этой сборкой. +[assembly: AssemblyTitle("dtlauncher-server")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("dtlauncher-server")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// из модели COM задайте для атрибута ComVisible этого типа значение true. +[assembly: ComVisible(false)] + +// Следующий GUID представляет идентификатор typelib, если этот проект доступен из модели COM +[assembly: Guid("4f183e7c-a23d-4f5f-933c-f9f32bdc403a")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Номер редакции +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/.old 0/dtlauncher-server/dtlauncher-server.csproj b/.old 0/dtlauncher-server/dtlauncher-server.csproj new file mode 100644 index 0000000..38fca35 --- /dev/null +++ b/.old 0/dtlauncher-server/dtlauncher-server.csproj @@ -0,0 +1,56 @@ + + + + + Debug + AnyCPU + {4F183E7C-A23D-4F5F-933C-F9F32BDC403A} + Exe + dtlauncher_server + dtlauncher-server + v4.8 + 512 + true + true + + + AnyCPU + none + true + bin\ + DEBUG;TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + {ce793497-2d5c-42d8-b311-e9b32af9cdfb} + DTLib + + + + + + + + + del /f /q dtlauncher-server.exe.config + + \ No newline at end of file diff --git a/.old 0/dtlauncher.sln b/.old 0/dtlauncher.sln new file mode 100644 index 0000000..85d73f0 --- /dev/null +++ b/.old 0/dtlauncher.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30907.101 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dtlauncher-client", "dtlauncher-client\dtlauncher-client.csproj", "{EAB95DEC-0D9B-4E17-8875-0159358AC240}" + ProjectSection(ProjectDependencies) = postProject + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} = {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dtlauncher-server", "dtlauncher-server\dtlauncher-server.csproj", "{4F183E7C-A23D-4F5F-933C-F9F32BDC403A}" + ProjectSection(ProjectDependencies) = postProject + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} = {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib", "..\DTLib\DTLib.csproj", "{CE793497-2D5C-42D8-B311-E9B32AF9CDFB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Build|Any CPU = Build|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EAB95DEC-0D9B-4E17-8875-0159358AC240}.Build|Any CPU.ActiveCfg = Build|Any CPU + {EAB95DEC-0D9B-4E17-8875-0159358AC240}.Build|Any CPU.Build.0 = Build|Any CPU + {4F183E7C-A23D-4F5F-933C-F9F32BDC403A}.Build|Any CPU.ActiveCfg = Build|Any CPU + {4F183E7C-A23D-4F5F-933C-F9F32BDC403A}.Build|Any CPU.Build.0 = Build|Any CPU + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB}.Build|Any CPU.ActiveCfg = Build|Any CPU + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB}.Build|Any CPU.Build.0 = Build|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E6569C0C-DD32-4F7D-AD4C-DBC5434D2F8C} + EndGlobalSection +EndGlobal diff --git a/.old 1/dtlauncher-client/App.config b/.old 1/dtlauncher-client/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/.old 1/dtlauncher-client/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.old 1/dtlauncher-client/Program.cs b/.old 1/dtlauncher-client/Program.cs new file mode 100644 index 0000000..6969987 --- /dev/null +++ b/.old 1/dtlauncher-client/Program.cs @@ -0,0 +1,161 @@ +using DTLib; +using System; +using System.IO; +using System.Net; +using System.Net.Sockets; +using static DTLib.NetWork; + +namespace dtlauncher_client +{ + class Program + { + static DTLib.ConsoleGUI.Window gui = new DTLib.ConsoleGUI.Window(90, 30); + static Socket mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + static string logfile = $"logs\\client-{DateTime.Now}.log".Replace(':', '-').Replace(' ', '_'); + //static bool enter = false; + //static string inputText = ""; + + static void Main() + { + try + { + Console.Title = "dtlauncher"; + gui.ReadFromFile("gui\\start_tab.gui"); + gui.ShowAll(); + NetWork.Log += Log; + Log("b", "launcher is starting\n"); + // подключение к серверу + mainSocket.Connect(new IPEndPoint(Dns.GetHostAddresses( + FileWork.ReadFromConfig("client.cfg", "central server ip"))[0], + Convert.ToInt32(FileWork.ReadFromConfig("client.cfg", "central server port")))); + mainSocket.ReceiveTimeout = 2000; + gui.ChangeLine(3, 4, 'y', "trying to connect to the main server..."); + string recieved = mainSocket.Request("new user connection try").ToStr(); + if (recieved != "new user connection created") + throw new Exception("can't connect to the main server"); + gui.ChangeLine(3, 5, 'g', "connected to the main server"); + //NetWork.RequestServersList(mainSocket); + gui.ResetCursor(); + Input(); + } + catch (System.Threading.ThreadAbortException) + { + + } + catch (Exception e) + { + Log("r", "\nerror:\n" + e.Message + "\n" + e.StackTrace + '\n'); + Console.ResetColor(); + Console.ReadLine(); + } + } + + static void Input() + { + while (true) + { + ConsoleKeyInfo readKeyResult = Console.ReadKey(true); // Считывание ввода + switch (readKeyResult.Key) + { + case ConsoleKey.F1: + gui.ReadFromFile("gui\\files_tab.gui"); + for (sbyte i = 3; i < 89; i++) + gui.ChangeColor(i, 1, 'w'); + for (sbyte i = 3; i < 13; i++) + gui.ChangeColor(i, 1, 'c'); + gui.UpdateAll(); + break; + case ConsoleKey.F2: + gui.ReadFromFile("gui\\servers_tab.gui"); + for (sbyte i = 3; i < 89; i++) + gui.ChangeColor(i, 1, 'w'); + for (sbyte i = 19; i < 31; i++) + gui.ChangeColor(i, 1, 'c'); + gui.UpdateAll(); + break; + case ConsoleKey.F3: + gui.ReadFromFile("gui\\settings_tab.gui"); + for (sbyte i = 3; i < 89; i++) + gui.ChangeColor(i, 1, 'w'); + for (sbyte i = 37; i < 50; i++) + gui.ChangeColor(i, 1, 'c'); + gui.UpdateAll(); + break; + case ConsoleKey.F4: + Log("m", SimpleConverter.Truncate(9 / 4).ToString()); + break; + case ConsoleKey.F5: + Console.Clear(); + gui.ShowAll(); + break; + case ConsoleKey.F6: + mainSocket.FSP_Download(new FSP_FileObject("share\\file.arc", "downloads\\file.arc")); + break; + case ConsoleKey.F7: + break; + /*case ConsoleKey.F8: + break; + case ConsoleKey.F9: + break; + case ConsoleKey.F10: + break; + case ConsoleKey.F11: + break; + case ConsoleKey.F12: + break; + case ConsoleKey.UpArrow: + break; + case ConsoleKey.DownArrow: + break; + case ConsoleKey.LeftArrow: + break; + case ConsoleKey.RightArrow: + break; + case ConsoleKey.PageUp: + break; + case ConsoleKey.PageDown: + break; + case ConsoleKey.Home: + break; + case ConsoleKey.End: + break; + case ConsoleKey.Escape: + break; + case ConsoleKey.Enter: + enter = true; + break; + case ConsoleKey.Backspace: + if (inputText.Length > 0) + inputText = inputText.Remove(inputText.Length - 1); + break;*/ + default: + //inputText += readKeyResult.KeyChar; + break; + } + } + } + static void Log(string color, string msg) + { + ColoredText.WriteColored(color, msg); + FileWork.Log(logfile, msg); + } + + static void Log(string[] input) + { + if (input.Length % 2 == 0) + { + ColoredText.WriteColored(input); + string str = ""; + for (ushort i = 0; i < input.Length; i++) + { + str += input[++i]; + } + FileWork.Log(logfile, str); + } + else + { + throw new Exception("error in Log(): every text string must have color string before"); + } + } + } +} diff --git a/.old 1/dtlauncher-client/Properties/AssemblyInfo.cs b/.old 1/dtlauncher-client/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a46c9ad --- /dev/null +++ b/.old 1/dtlauncher-client/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанные с этой сборкой. +[assembly: AssemblyTitle("dtlauncher-client")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("dtlauncher-client")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// из модели COM задайте для атрибута ComVisible этого типа значение true. +[assembly: ComVisible(false)] + +// Следующий GUID представляет идентификатор typelib, если этот проект доступен из модели COM +[assembly: Guid("eab95dec-0d9b-4e17-8875-0159358ac240")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Номер редакции +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/.old 1/dtlauncher-client/bin.rar b/.old 1/dtlauncher-client/bin.rar new file mode 100644 index 0000000..80669e7 Binary files /dev/null and b/.old 1/dtlauncher-client/bin.rar differ diff --git a/.old 1/dtlauncher-client/dtlauncher-client.csproj b/.old 1/dtlauncher-client/dtlauncher-client.csproj new file mode 100644 index 0000000..541ab01 --- /dev/null +++ b/.old 1/dtlauncher-client/dtlauncher-client.csproj @@ -0,0 +1,52 @@ + + + + + Debug + AnyCPU + {EAB95DEC-0D9B-4E17-8875-0159358AC240} + Exe + dtlauncher_client + dtlauncher-client + v4.8 + 512 + true + true + + + AnyCPU + none + true + bin\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + {ce793497-2d5c-42d8-b311-e9b32af9cdfb} + DTLib + + + + + del /f /q dtlauncher-client.exe.config + + \ No newline at end of file diff --git a/.old 1/dtlauncher-client/dtlauncher/DTLib.dll b/.old 1/dtlauncher-client/dtlauncher/DTLib.dll new file mode 100644 index 0000000..9dcb486 Binary files /dev/null and b/.old 1/dtlauncher-client/dtlauncher/DTLib.dll differ diff --git a/.old 1/dtlauncher-client/dtlauncher/client.cfg b/.old 1/dtlauncher-client/dtlauncher/client.cfg new file mode 100644 index 0000000..4248c8f --- /dev/null +++ b/.old 1/dtlauncher-client/dtlauncher/client.cfg @@ -0,0 +1,2 @@ +central server ip: m1net.keenetic.pro +central server port: 20000 \ No newline at end of file diff --git a/.old 1/dtlauncher-client/dtlauncher/dtlauncher-client.exe b/.old 1/dtlauncher-client/dtlauncher/dtlauncher-client.exe new file mode 100644 index 0000000..11715bb Binary files /dev/null and b/.old 1/dtlauncher-client/dtlauncher/dtlauncher-client.exe differ diff --git a/.old 1/dtlauncher-client/dtlauncher/gui/files_tab.gui b/.old 1/dtlauncher-client/dtlauncher/gui/files_tab.gui new file mode 100644 index 0000000..b04b4b6 --- /dev/null +++ b/.old 1/dtlauncher-client/dtlauncher/gui/files_tab.gui @@ -0,0 +1,61 @@ +┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ +┃ [F1] files ┃ [F2] servers ┃ [F3] settings ┃ [F4] exit ┃ [F5] refresh ┃ +┣━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━┫ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┃ │ ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww diff --git a/.old 1/dtlauncher-client/dtlauncher/gui/servers_tab.gui b/.old 1/dtlauncher-client/dtlauncher/gui/servers_tab.gui new file mode 100644 index 0000000..fa90ecc --- /dev/null +++ b/.old 1/dtlauncher-client/dtlauncher/gui/servers_tab.gui @@ -0,0 +1,61 @@ +┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ +┃ [F1] files ┃ [F2] servers ┃ [F3] settings ┃ [F4] exit ┃ [F5] refresh ┃ +┣━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━┫ +┃ name ping ┃ +┠────────────────────────────────────────────────────────────────────────────────────────┨ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww diff --git a/.old 1/dtlauncher-client/dtlauncher/gui/settings_tab.gui b/.old 1/dtlauncher-client/dtlauncher/gui/settings_tab.gui new file mode 100644 index 0000000..1730a22 --- /dev/null +++ b/.old 1/dtlauncher-client/dtlauncher/gui/settings_tab.gui @@ -0,0 +1,61 @@ +┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ +┃ [F1] files ┃ [F2] servers ┃ [F3] settings ┃ [F4] exit ┃ [F5] refresh ┃ +┣━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━┫ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww diff --git a/.old 1/dtlauncher-client/dtlauncher/gui/start_tab.gui b/.old 1/dtlauncher-client/dtlauncher/gui/start_tab.gui new file mode 100644 index 0000000..1730a22 --- /dev/null +++ b/.old 1/dtlauncher-client/dtlauncher/gui/start_tab.gui @@ -0,0 +1,61 @@ +┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ +┃ [F1] files ┃ [F2] servers ┃ [F3] settings ┃ [F4] exit ┃ [F5] refresh ┃ +┣━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━┫ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┃ ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww diff --git a/.old 1/dtlauncher-server/App.config b/.old 1/dtlauncher-server/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/.old 1/dtlauncher-server/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.old 1/dtlauncher-server/Program.cs b/.old 1/dtlauncher-server/Program.cs new file mode 100644 index 0000000..ea60a46 --- /dev/null +++ b/.old 1/dtlauncher-server/Program.cs @@ -0,0 +1,151 @@ +using DTLib; +using System; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using static DTLib.NetWork; + +namespace dtlauncher_server +{ + class Program + { + //static ConsoleGUI gui = new ConsoleGUI(90, 30); + static string logfile = $"logs\\server-{DateTime.Now}.log".Replace(':', '-').Replace(' ', '_'); + static Socket mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + //static Dictionary users = new Dictionary(); + + static void Main(string[] args) + { + while (true) + { + try + { + Console.Title = "dtlauncher server"; + //gui.ReadFromFile("gui\\main.gui"); + //gui.ShowAll(); + NetWork.Log += Log; + Log("b", $"<{FileWork.ReadFromConfig("server.cfg", "server ip")}> : <{Convert.ToInt32(FileWork.ReadFromConfig("server.cfg", "server port"))}>\n"); + mainSocket.Bind(new IPEndPoint(IPAddress.Parse( + FileWork.ReadFromConfig("server.cfg", "server ip")), + Convert.ToInt32(FileWork.ReadFromConfig("server.cfg", "server port")))); + Log("g", "server started succesfully\n"); + //Thread userCheckThread = new Thread(CloseUnusedUserThreads); + //userCheckThread.Start(); + try + { + mainSocket.Listen(200); + while (true) + { + var userSocket = mainSocket.Accept(); + var userThread = new Thread(new ParameterizedThreadStart(UserStart)); + //users.Add(userSocket, userThread); + userThread.Start(userSocket); + } + } + catch (Exception ex) + { + Log("r", $"handler error:\n message:\n {ex.Message}\nmethod:\n {ex.TargetSite}\n"); + } + } + catch (ThreadAbortException) + { + + } + catch (Exception ex) + { + if (mainSocket.IsBound) mainSocket.CloseSocket(); + Log("r", $"Main() error:\n message:\n {ex.Message}\nmethod:\n {ex.TargetSite}\n"); + } + Thread.Sleep(1500); + } + } + + static void Log(string color, string msg) + { + ColoredText.WriteColored(color, "[" + DateTime.Now.ToString() + "]: " + msg); + FileWork.Log(logfile, msg); + } + + static void Log(string[] input) + { + if (input.Length % 2 == 0) + { + input[1] = "[" + DateTime.Now.ToString() + "]: " + input[1]; + ColoredText.WriteColored(input); + string str = ""; + for (ushort i = 0; i < input.Length; i++) + { + str += input[++i]; + } + FileWork.Log(logfile, str); + } + else + { + throw new Exception("error in Log(): every text string must have color string before"); + } + } + + static void UserStart(dynamic _handlerSocket) + { + Socket handlerSocket = (Socket)_handlerSocket; + Log("g", "user connected\n"); + try + { + string recieved = handlerSocket.GetData().ToStr(); + if (recieved == "new user connection try") + { + handlerSocket.Send("new user connection created".ToBytes()); + while (true) + { + recieved = handlerSocket.GetData().ToStr(); + switch (recieved) + { + // ответ на NetWork.Ping() + case "ping": + handlerSocket.Send("pong".ToBytes()); + break; + // отправка списка активных серверов + case "requesting servers list": + + break; + case "requesting file download": + handlerSocket.FSP_Upload(); + break; + default: + throw new Exception("unknown request: " + recieved); + } + } + } + + else + { + throw new Exception("incorrect connection try"); + } + + } + catch (Exception ex) + { + Log("y", $"UserStart() error:\n message:\n {ex.Message}\n{ex.StackTrace}\n"); + handlerSocket.CloseSocket(); + Thread.CurrentThread.Abort(); + } + } + + /*static void CloseUnusedUserThreads() + { + while (true) + { + foreach (Socket s in users.Keys) + { + if (!NetWork.Ping(s)) + { + Log("y", "closing unused user thread\n"); + users[s].Abort(); + users.Remove(s); + } + } + Thread.Sleep(300000); + } + }*/ + } +} diff --git a/.old 1/dtlauncher-server/Properties/AssemblyInfo.cs b/.old 1/dtlauncher-server/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..13ba653 --- /dev/null +++ b/.old 1/dtlauncher-server/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанные с этой сборкой. +[assembly: AssemblyTitle("dtlauncher-server")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("dtlauncher-server")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// из модели COM задайте для атрибута ComVisible этого типа значение true. +[assembly: ComVisible(false)] + +// Следующий GUID представляет идентификатор typelib, если этот проект доступен из модели COM +[assembly: Guid("4f183e7c-a23d-4f5f-933c-f9f32bdc403a")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Номер редакции +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/.old 1/dtlauncher-server/dtlauncher-server.csproj b/.old 1/dtlauncher-server/dtlauncher-server.csproj new file mode 100644 index 0000000..38fca35 --- /dev/null +++ b/.old 1/dtlauncher-server/dtlauncher-server.csproj @@ -0,0 +1,56 @@ + + + + + Debug + AnyCPU + {4F183E7C-A23D-4F5F-933C-F9F32BDC403A} + Exe + dtlauncher_server + dtlauncher-server + v4.8 + 512 + true + true + + + AnyCPU + none + true + bin\ + DEBUG;TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + {ce793497-2d5c-42d8-b311-e9b32af9cdfb} + DTLib + + + + + + + + + del /f /q dtlauncher-server.exe.config + + \ No newline at end of file diff --git a/.old 1/dtlauncher.sln b/.old 1/dtlauncher.sln new file mode 100644 index 0000000..85d73f0 --- /dev/null +++ b/.old 1/dtlauncher.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30907.101 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dtlauncher-client", "dtlauncher-client\dtlauncher-client.csproj", "{EAB95DEC-0D9B-4E17-8875-0159358AC240}" + ProjectSection(ProjectDependencies) = postProject + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} = {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dtlauncher-server", "dtlauncher-server\dtlauncher-server.csproj", "{4F183E7C-A23D-4F5F-933C-F9F32BDC403A}" + ProjectSection(ProjectDependencies) = postProject + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} = {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib", "..\DTLib\DTLib.csproj", "{CE793497-2D5C-42D8-B311-E9B32AF9CDFB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Build|Any CPU = Build|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EAB95DEC-0D9B-4E17-8875-0159358AC240}.Build|Any CPU.ActiveCfg = Build|Any CPU + {EAB95DEC-0D9B-4E17-8875-0159358AC240}.Build|Any CPU.Build.0 = Build|Any CPU + {4F183E7C-A23D-4F5F-933C-F9F32BDC403A}.Build|Any CPU.ActiveCfg = Build|Any CPU + {4F183E7C-A23D-4F5F-933C-F9F32BDC403A}.Build|Any CPU.Build.0 = Build|Any CPU + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB}.Build|Any CPU.ActiveCfg = Build|Any CPU + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB}.Build|Any CPU.Build.0 = Build|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E6569C0C-DD32-4F7D-AD4C-DBC5434D2F8C} + EndGlobalSection +EndGlobal diff --git a/.old 2/DTLib/ColoredText.cs b/.old 2/DTLib/ColoredText.cs new file mode 100644 index 0000000..a8147cd --- /dev/null +++ b/.old 2/DTLib/ColoredText.cs @@ -0,0 +1,122 @@ +using System; + +namespace DTLib +{ + // + // изменение цвета текста в консоли + // + static public class ColoredText + { + // присвоение цвета тексту + static public ConsoleColor ParseColor(string color) + { + switch (color) + { + //case "magneta": + case "m": + return ConsoleColor.Magenta; + //case "green": + case "g": + return ConsoleColor.Green; + //case "red": + case "r": + return ConsoleColor.Red; + //case "yellow": + case "y": + return ConsoleColor.Yellow; + //case "white": + case "w": + return ConsoleColor.White; + //case "blue": + case "b": + return ConsoleColor.Blue; + //case "cyan": + case "c": + return ConsoleColor.Cyan; + //case "gray": + case "a": + return ConsoleColor.Gray; + //case "black": + case "t": + return ConsoleColor.Black; + default: + throw new Exception("incorrect color: " + color); + } + } + + // вывод цветного текста + static public void WriteColored(string[] input) + { + if (input.Length % 2 == 0) + { + string str = ""; + for (ushort i = 0; i < input.Length; i++) + { + var c = ParseColor(input[i]); + if (Console.ForegroundColor != c) + { + Console.Write(str); + Console.ForegroundColor = c; + str = ""; + } + str += input[++i]; + } + if (str != "") + Console.Write(str); + } + else + { + throw new Exception("error in WriteColored(): every text string must have color string before"); + } + } + + /*static public void WriteColoredB(string[] input) + { + if (input.Length % 3 == 0) + { + string str = ""; + for (ushort i = 0; i < input.Length; i++) + { + var f = ParseColor(input[i]); + var b = ParseColor(input[++i]); + if (Console.ForegroundColor != f || Console.BackgroundColor != b) + { + Console.Write(str); + Console.ForegroundColor = f; + Console.BackgroundColor = b; + str = ""; + } + str += input[++i]; + } + if (str != "") + Console.Write(str); + } + else + { + throw new Exception("error in WriteColored(): every text string must have color string before"); + } + }*/ + + static public void WriteColored(string color, string text) + { + var c = ParseColor(color); + if (Console.ForegroundColor != c) + { + Console.ForegroundColor = c; + } + Console.Write(text); + } + + // ввод цветного текста + static public string ReadColored(string color) + { + var c = ParseColor(color); + if (Console.ForegroundColor != c) + { + Console.ForegroundColor = c; + } + string text = Console.ReadLine(); + return text; + } + } +} \ No newline at end of file diff --git a/.old 2/DTLib/ConsoleGUI.cs b/.old 2/DTLib/ConsoleGUI.cs new file mode 100644 index 0000000..7e4351d --- /dev/null +++ b/.old 2/DTLib/ConsoleGUI.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; + +namespace DTLib.ConsoleGUI +{ + // + // создание gui из текста в консоли + // + public class Window + { + public int WindowWidth { get; private set; } + public int WindowHeight { get; private set; } + public char[,] Text; + public char[,] nowText; + public char[,] TextColors; + public char[,] nowTextColors; + + public Window(int windowWidth, int windowHeight) + { + WindowWidth = windowWidth; + WindowHeight = windowHeight; + Text = new char[windowWidth, windowHeight]; + TextColors = new char[windowWidth, windowHeight]; + nowText = new char[windowWidth, windowHeight]; + nowTextColors = new char[windowWidth, windowHeight]; + Console.WindowWidth = WindowWidth + 1; + Console.WindowHeight = WindowHeight + 1; + Console.BufferWidth = WindowWidth + 1; + Console.BufferHeight = WindowHeight + 1; + Console.OutputEncoding = SimpleConverter.UTF8; + Console.InputEncoding = SimpleConverter.UTF8; + Console.CursorVisible = false; + // заполнение массивов + for (sbyte y = 0; y < WindowHeight; y++) + { + for (sbyte x = 0; x < WindowWidth; x++) + { + Text[x, y] = ' '; + nowText[x, y] = ' '; + TextColors[x, y] = 'w'; + nowTextColors[x, y] = 'w'; + } + } + } + + // считывает массив символов из файла + // ширина и высота текста должны быть как указанные при инициализации объекта этого класса + public void ReadFromFile(string path) + { + var r = new StreamReader(path, SimpleConverter.UTF8); + char[] s = new char[1]; + // считывание текста + sbyte y = 0, x = 0; + r.Read(s, 0, 1); + while (!r.EndOfStream && y < WindowHeight) + { + if (x == WindowWidth) + { + r.Read(s, 0, 1); + x = 0; + y++; + } + else + { + Text[x, y] = s[0]; + x++; + } + r.Read(s, 0, 1); + } + r.Read(s, 0, 1); + // считывание цвета + // если не находит цвет в файле, оставляет старый + if (s[0] == '\n') + { + r.Read(s, 0, 1); + y = 0; + x = 0; + while (!r.EndOfStream && y < WindowHeight) + { + if (x == WindowWidth) + { + r.Read(s, 0, 1); + x = 0; + y++; + } + else + { + TextColors[x, y] = s[0]; + x++; + } + r.Read(s, 0, 1); + } + } + r.Close(); + } + + public void ResetCursor() + { + Console.SetCursorPosition(0, WindowHeight); + } + + // заменяет символ выведенный, использовать после ShowAll() + public void ChangeChar(sbyte x, sbyte y, char ch) + { + Text[x, y] = ch; + nowText[x, y] = ch; + Console.SetCursorPosition(x, y); + ColoredText.WriteColored(TextColors[x, y].ToString(), ch.ToString()); + } + + public void ChangeColor(sbyte x, sbyte y, char color) + { + TextColors[x, y] = color; + nowTextColors[x, y] = color; + Console.SetCursorPosition(x, y); + ColoredText.WriteColored(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; + Console.SetCursorPosition(x, y); + ColoredText.WriteColored(color.ToString(), ch.ToString()); + } + + public void ChangeLine(sbyte x, sbyte y, char color, string line) + { + Console.SetCursorPosition(x, y); + for (sbyte i = 0; i < line.Length; i++) + { + Text[x + i, y] = line[i]; + nowText[x + i, y] = line[i]; + TextColors[x + i, y] = color; + nowTextColors[x + i, y] = color; + } + ColoredText.WriteColored(color.ToString(), line); + } + + // выводит все символы + public void ShowAll() + { + var l = new List(); + for (sbyte y = 0; y < WindowHeight; y++) + { + for (sbyte x = 0; x < WindowWidth; x++) + { + l.Add(TextColors[x, y].ToString()); + l.Add(Text[x, y].ToString()); + nowText[x, y] = Text[x, y]; + nowTextColors[x, y] = TextColors[x, y]; + } + l.Add("w"); + l.Add("\n"); + } + ColoredText.WriteColored(l.ToArray()); + //Console.WriteLine(); + } + + public void UpdateAll() + { + for (sbyte y = 0; y < WindowHeight; y++) + { + for (sbyte x = 0; x < WindowWidth; x++) + { + Console.SetCursorPosition(x, y); + if (TextColors[x, y] != nowTextColors[x, y] || Text[x, y] != nowText[x, y]) + { + ColoredText.WriteColored(TextColors[x, y].ToString(), Text[x, y].ToString()); + nowText[x, y] = Text[x, y]; + nowTextColors[x, y] = TextColors[x, y]; + } + } + Console.Write('\n'); + } + } + + + + public async void ChangeCharAsync(sbyte x, sbyte y, char ch) + { + await Task.Run(() => + { + ChangeChar(x, y, ch); + }); + } + + public async void ChangeColorAsync(sbyte x, sbyte y, char color) + { + await Task.Run(() => + { + ChangeColor(x, y, color); + }); + } + + public async void ChangeCharAndColorAsync(sbyte x, sbyte y, char color, char ch) + { + await Task.Run(() => + { + ChangeCharAndColor(x, y, color, ch); + }); + } + + public async void ChangeLineAsync(sbyte x, sbyte y, char color, string line) + { + await Task.Run(() => + { + ChangeLine(x, y, color, line); + }); + } + + public async void ShowAllAsync() + { + await Task.Run(() => + { + ShowAll(); + }); + } + + public async void UpdateAllAsync() + { + await Task.Run(() => + { + UpdateAll(); + }); + } + } + + public class Tab + { + public Window Window; + public string Name; + + public Tab(Window window) + { + Window = window; + } + } + + public class Box + { + public Tab Tab; + public int LeftTopCorner, Width, Heigth; + + public Box(Tab tab, int leftTopCorner, int width, int heigth) + { + Tab = tab; + LeftTopCorner = leftTopCorner; + Width = width; + Heigth = heigth; + } + } +} diff --git a/.old 2/DTLib/DTLib.csproj b/.old 2/DTLib/DTLib.csproj new file mode 100644 index 0000000..99fb4aa --- /dev/null +++ b/.old 2/DTLib/DTLib.csproj @@ -0,0 +1,49 @@ + + + + + Debug + AnyCPU + {CE793497-2D5C-42D8-B311-E9B32AF9CDFB} + Library + Properties + DTLib + DTLib + v4.8 + 512 + true + + + none + true + bin\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.old 2/DTLib/FileWork.cs b/.old 2/DTLib/FileWork.cs new file mode 100644 index 0000000..8758afd --- /dev/null +++ b/.old 2/DTLib/FileWork.cs @@ -0,0 +1,43 @@ +using System; +using System.IO; + +namespace DTLib +{ + public static class FileWork + { + public static void Log(string logfile, string msg) + { + lock (new object()) + { + var st = File.Open(logfile, FileMode.Append); + var writer = new StreamWriter(st, SimpleConverter.UTF8); + string logMsg = $"[{DateTime.Now}]: {msg}"; + writer.Write(logMsg); + writer.Close(); + st.Close(); + } + } + + public static void DirExistenceCheck(string dir) + { + if (!Directory.Exists(dir)) + Directory.CreateDirectory(dir); + } + + static public string ReadFromConfig(string configfile, string key) + { + var reader = new StreamReader(configfile); + while (!reader.EndOfStream) + { + string st = reader.ReadLine(); + if (!st.StartsWith("#") && st.Contains(key + ": ")) + { + reader.Close(); + return st.Remove(0, st.IndexOf(key + ": ") + key.Length + 2); + } + } + reader.Close(); + return null; + } + } +} diff --git a/.old 2/DTLib/NetWork.cs b/.old 2/DTLib/NetWork.cs new file mode 100644 index 0000000..de6fd21 --- /dev/null +++ b/.old 2/DTLib/NetWork.cs @@ -0,0 +1,370 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace DTLib +{ + // + // некоторые полезные методы для работы с TCP сокетами (Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) + // + static public class NetWork + { + public delegate void LogDelegate(string[] msg); + // можно присвоить методы этому делегату чтоб выводить логи + static public LogDelegate Log; + static void LogSimple(string color, string msg) + { + Log(new string[] { color, msg }); + } + + // правильно закрывает сокет + static public void CloseSocket(this Socket socket) + { + socket.Shutdown(SocketShutdown.Both); + socket.Close(); + } + // получение информации (сокет должен быть в режиме Listen) + static public byte[] GetData(this Socket socket) + { + List output = new List(); + byte[] data = new byte[256]; + do + { + int amount = socket.Receive(data, data.Length, 0); + for (int i = 0; i < amount; i++) + output.Add(data[i]); + } + while (socket.Available > 0); + return output.ToArray(); + } + + // отправка запроса и получение ответа на него (сокет должен быть в режиме Listen) + static public byte[] Request(this Socket socket, string request) + { + socket.Send(request.ToBytes()); + return GetData(socket); + } + + static public byte[] Request(this Socket socket, byte[] request) + { + socket.Send(request); + return GetData(socket); + } + + /*static public MessageObject SplitMessage(byte[] recieved) + { + if (recieved.Length != 2284) throw new Exception("incorrect message length: " + recieved.Length); + var msg = new MessageObject(); + msg.Number = recieved[2]; + for (byte i = 3; i < 9; i++) + { + msg.Number = msg.Number * 10 + recieved[i]; + } + msg.Datetime = new DateTime(recieved[9] * 100 + recieved[10], recieved[11], recieved[12], + recieved[13], recieved[14], recieved[15]); + for (byte i = 16; i < 22; i++) + { + msg.Sender = msg.Sender * 10 + recieved[i]; + } + for (byte i = 22; i < 28; i++) + { + msg.Channel = msg.Channel * 10 + recieved[i]; + } + List text = new List(); + for (short i = 28; i < 2028; i++) + { + text.Add(recieved[i]); + } + msg.Text = text.ToStr(); + Log($"message <{msg.Number}> is had recieved"); + return msg; + }*/ + + static public void FtpDownload(string address, string login, string password, string outfile) + { + try + { + // debug + Log(new string[] { + "y", "file on server: <", "c",address, "y",">\nfile on client: <", + "c",outfile,"y", ">\n"}); + // создание запроса + // "ftp://m1net.keenetic.pro:20000/" + @infile + FtpWebRequest request = (FtpWebRequest)WebRequest.Create(address); + request.Credentials = new NetworkCredential(login, password); + request.Method = WebRequestMethods.Ftp.DownloadFile; + // получение ответа на запрос + FtpWebResponse response = (FtpWebResponse)request.GetResponse(); + Stream responseStream = response.GetResponseStream(); + FileStream fs = new FileStream(@Directory.GetCurrentDirectory() + '\\' + @outfile, FileMode.Create); + byte[] buffer = new byte[64]; + int size = 0; + + while ((size = responseStream.Read(buffer, 0, buffer.Length)) > 0) + { + fs.Write(buffer, 0, size); + } + fs.Close(); + response.Close(); + } + catch (WebException e) + { + throw new Exception("ftp error:\n" + ((FtpWebResponse)e.Response).StatusDescription + '\n'); + } + } + + static public ServerObject[] RequestServersList(Socket centralServer) + { + List servers = new List(); + string[] lines = Request(centralServer, "a356a4257dbf9d87c77cf87c3c694b30160b6ddfd3db82e7f62320207109e352").ToStr().Split('\n'); + for (int i = 0; i < lines.Length; i++) + { + string[] properties = lines[i].Split(','); + servers.Add(new ServerObject(properties[0], properties[1], properties[2])); + } + return servers.ToArray(); + } + + static public 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; + proc.Start(); + var outStream = proc.StandardOutput; + var rezult = outStream.ReadToEnd(); + rezult = rezult.Remove(0, rezult.LastIndexOf('=') + 2); + return rezult.Remove(rezult.Length - 4); + } + + static public bool Ping(this Socket socket) + { + var rec = Request(socket, "ab53bf045004875fb17086f7f992b0514fb96c038f336e0bfc21609b20303f07"); + if (rec.ToStr() == "91b5c0383b75fb1708f00486f7f9b96c038ab3bfc21059b20176f603692b05e0") + { + return true; + } + else return false; + } + + static public void FSP_Download(this Socket mainSocket, FSP_FileObject file) + { + Log(new string[] { "c", $"remote socket accepted download request: {file.ClientFilePath}\n" }); + mainSocket.Send("requesting file download".ToBytes()); + string answ = mainSocket.GetPackageClear(64, "<", ">").ToStr(); + if (answ != "download request accepted") + throw new Exception($"FSP_Download() error: a download socket recieved an incorrect message: {answ}\n"); + mainSocket.SendPackage(276, file.ServerFilePath.ToBytes(), "", ""); + file.Size = Convert.ToUInt32(mainSocket.GetPackageClear(64, "", "").ToStr()); + file.Hash = mainSocket.GetPackageClear(64, "", ""); + mainSocket.SendPackage(64, "ready".ToBytes(), "<", ">"); + file.Stream = File.Open(file.ClientFilePath, FileMode.Create, FileAccess.Write); + int packagesCount = 0; + byte[] buffer = new byte[5120]; + var hashstr = file.Hash.HashToString(); + int fullPackagesCount = SimpleConverter.Truncate(file.Size / buffer.Length); + // рассчёт скорости + int seconds = 0; + var speedCounter = new Timer(true, 1000, () => + { + seconds++; + LogSimple("c", $"speed= {packagesCount * buffer.Length / (seconds * 1000)} kb/s\n"); + }); + // получение файла + for (; packagesCount < fullPackagesCount; packagesCount++) + { + string header = $"<{packagesCount}>"; + buffer = mainSocket.GetPackageRaw(buffer.Length + 2 + header.Length, header, "<>"); + file.Stream.Write(buffer, 0, buffer.Length); + file.Stream.Flush(); + } + Log(new string[] { "y", " full packages recieved\n" }); + speedCounter.Stop(); + // получение остатка + mainSocket.SendPackage(64, "remain request".ToBytes(), "<", ">"); + buffer = mainSocket.GetPackageRaw(Convert.ToInt32(file.Size - fullPackagesCount * 5120) + 16, "", ""); + file.Stream.Write(buffer, 0, buffer.Length); + file.Stream.Flush(); + file.Stream.Close(); + Log(new string[] { "g", $" file {file.ClientFilePath} ({packagesCount * 5120 + buffer.Length} of {file.Size} bytes) downloaded.\n" }); + } + + static public void FSP_Upload(this Socket mainSocket) + { + mainSocket.SendPackage(64, "download request accepted".ToBytes(), "<", ">"); + var file = new FSP_FileObject(); + file.ServerFilePath = mainSocket.GetPackageClear(276, "", "").ToStr(); + file.Size = new FileInfo(file.ServerFilePath).Length; + file.Hash = new SecureHasher(256).HashFile(file.ServerFilePath); + mainSocket.SendPackage(64, file.Size.ToString().ToBytes(), "", ""); + mainSocket.SendPackage(64, file.Hash, "", ""); + if (mainSocket.GetPackageClear(64, "<", ">").ToStr() != "ready") + throw new Exception("user socket isn't ready"); + Log(new string[] { "c", $"local socket accepted file download request: {file.ServerFilePath}\n" }); + file.Stream = new FileStream(file.ServerFilePath, FileMode.Open, FileAccess.Read); + byte[] buffer = new byte[5120]; + var hashstr = file.Hash.HashToString(); + int packagesCount = 0; + int seconds = 0; + // рассчёт скорости + var speedCounter = new Timer(true, 1000, () => + { + seconds++; + LogSimple("c", $"speed= {packagesCount * buffer.Length / (seconds * 1000)} kb/s\n"); + }); + // отправка файла + int fullPackagesCount = SimpleConverter.Truncate(file.Size / buffer.Length); + for (; packagesCount < fullPackagesCount; packagesCount++) + { + string header = $"<{packagesCount}>"; + file.Stream.Read(buffer, 0, buffer.Length); + try { mainSocket.SendPackage(buffer.Length + 2 + header.Length, buffer, header, "<>"); } + catch (Exception ex) { Log(new string[] { "r", "FSP_Upload() error: " + ex.Message + "\n" + ex.StackTrace + '\n' }); } + } + Log(new string[] { "y", " full packages send\n" }); + speedCounter.Stop(); + // досылка остатка + var req = mainSocket.GetPackageClear(64, "<", ">"); + if (req.ToStr() != "remain request") + { + throw new Exception("FSP_Upload() error: didn't get remain request"); + } + buffer = new byte[Convert.ToInt32(file.Size - file.Stream.Position)]; + file.Stream.Read(buffer, 0, buffer.Length); + mainSocket.SendPackage(buffer.Length + 16, buffer, "", ""); + file.Stream.Close(); + Log(new string[] { "g", $" file {file.ServerFilePath} ({packagesCount * 5120 + buffer.Length} of {file.Size} bytes) uploaded.\n" }); + } + + // убирает пустые байты в конце пакета + static public byte[] GetPackageClear(this Socket socket, int packageSize, string startsWith, string endsWith) + { + byte[] data = socket.GetPackageRaw(packageSize, startsWith, endsWith); + bool clean = false; + for (int i = 0; !clean; i++) + { + if (data[i] != 00) + { + if (i != 0) data = data.Remove(0, i); + clean = true; + } + else clean = i == data.Length - 1; + } + return data; + } + //не убирает пустые байты в конце пакета + static public byte[] GetPackageRaw(this Socket socket, int packageSize, string startsWith, string endsWith) + { + byte[] data = new byte[packageSize]; + //Log(new string[] { "y", $"GetPackage() packegesize=<","c",packageSize.ToString(), + // "y", "> startsWith=<", "c", startsWith, "y", "> endsWith=<", "c", endsWith, "y", ">\n" }); + for (short s = 0; s < 2000; s += 10) + { + if (socket.Available >= packageSize) + { + socket.Receive(data, packageSize, 0); + if (data.StartsWith(startsWith) & data.EndsWith(endsWith)) + { + data = data.Remove(0, startsWith.ToBytes().Length); + data = data.Remove(data.Length - endsWith.ToBytes().Length, endsWith.ToBytes().Length); + return data; + } + else throw new Exception($"GetPackage() error: has got incorrect package\n"); + } + else Thread.Sleep(10); + } + throw new Exception($"GetPackage() error: timeout\n"); + } + + static public void SendPackage(this Socket socket, int length, byte[] data, string startsWith, string endsWith) + { + var list = new List(); + list.AddRange(startsWith.ToBytes()); + int i = startsWith.ToBytes().Length + endsWith.ToBytes().Length + data.Length; + //Log(new string[] { "y", $"SendPackage() length=<","c",length.ToString(),"y", "> packegesize=<","c",i.ToString(), + // "y", "> data.Length=<","c",data.Length.ToString(), "y", "> startsWith=<", "c", startsWith, "y", "> endsWith=<", "c", endsWith, "y", ">\n" }); + if (i > length) throw new Exception("SendPackage() error: int length is too small\n"); + for (; i < length; i++) + list.Add(0); + list.AddRange(data); + list.AddRange(endsWith.ToBytes()); + socket.Send(list.ToArray()); + } + } + + public class FSP_FileObject + { + public string ServerFilePath; + public string ClientFilePath; + public long Size; + public byte[] Hash; + public Stream Stream; + + public FSP_FileObject(string serverFile, string clientFile) + { + ServerFilePath = serverFile; + ClientFilePath = clientFile; + } + + public FSP_FileObject() { } + } + + public class ServerObject + { + public string Address; + public string Name; + public string Speed; + + public ServerObject(string address, string name, string speed) + { + Address = address; + Name = name; + Speed = speed; + } + } + + public class MessageObject + { + public uint Number; + public DateTime Datetime; + public int Sender; + public int Channel; + public string Text; + + public MessageObject() { } + + public MessageObject(byte[] recieved) + { + if (recieved.Length != 2284) throw new Exception("incorrect message length: " + recieved.Length); + Number = recieved[2]; + for (byte i = 3; i < 9; i++) + { + Number = Number * 10 + recieved[i]; + } + Datetime = new DateTime(recieved[9] * 100 + recieved[10], recieved[11], recieved[12], + recieved[13], recieved[14], recieved[15]); + for (byte i = 16; i < 22; i++) + { + Sender = Sender * 10 + recieved[i]; + } + for (byte i = 22; i < 28; i++) + { + Channel = Channel * 10 + recieved[i]; + } + List text = new List(); + for (short i = 28; i < 2028; i++) + { + text.Add(recieved[i]); + } + Text = text.ToStr(); + //Log($"message <{Number}> is had recieved"); + } + } +} diff --git a/.old 2/DTLib/Properties/AssemblyInfo.cs b/.old 2/DTLib/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c0201c5 --- /dev/null +++ b/.old 2/DTLib/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанные со сборкой. +[assembly: AssemblyTitle("DTLib")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DTLib")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// COM, задайте атрибуту ComVisible значение TRUE для этого типа. +[assembly: ComVisible(false)] + +// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM +[assembly: Guid("ce793497-2d5c-42d8-b311-e9b32af9cdfb")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Редакция +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/.old 2/DTLib/SecureHasher.cs b/.old 2/DTLib/SecureHasher.cs new file mode 100644 index 0000000..691664d --- /dev/null +++ b/.old 2/DTLib/SecureHasher.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; + +namespace DTLib +{ + // + // создаёт хеши из массива байт, двух массивов байт, стрима + // + public class SecureHasher + { + private dynamic hasher; + + // можно указать размер хеша (по умолчанию 256 байт) + public SecureHasher(short type) + { + switch (type) + { + case 256: + hasher = SHA256.Create(); + break; + case 384: + hasher = SHA384.Create(); + break; + case 512: + hasher = SHA512.Create(); + break; + default: + throw new Exception("unknown hash algorithm type: " + type + "\nin shouid be 256, 384 or 512\n"); + } + } + public SecureHasher() + { + hasher = SHA256.Create(); + } + + // просто хеш + public byte[] Hash(byte[] input) + { + return hasher.ComputeHash(input); + } + + // хеш из двух массивов + public byte[] HashSalt(byte[] input, byte[] salt) + { + List rez = new List(); + rez.AddRange(input); + rez.AddRange(salt); + return hasher.ComputeHash(rez.ToArray()); + } + + // читает стрим и вычисляет хеш всей инфы в нём + public byte[] HashStream(Stream st) + { + byte[] data = new byte[1024]; + List rez = new List(); + int offset = 0; + while (offset < st.Length) + { + offset += st.Read(data, offset, 1024); + rez.AddRange(hasher.ComputeHash(data)); + } + return hasher.ComputeHash(rez.ToArray()); + } + + // Хеш двух массивов в цикле. + // Работает быстро, так что вполне можно использовать количество циклов до 8к + + public byte[] HashSaltCycled(byte[] input, byte[] salt, ushort cycles) + { + for (uint i = 0; i < cycles; i++) + { + input = HashSalt(input, salt); + } + return input; + } + + public byte[] HashCycled(byte[] input, ushort cycles) + { + for (uint i = 0; i < cycles; i++) + { + input = Hash(input); + } + return input; + } + + public byte[] HashFile(string filename) + { + var md5 = MD5.Create(); + var stream = File.OpenRead(filename); + var hash = HashSaltCycled(md5.ComputeHash(stream), filename.ToBytes(), 512); + stream.Close(); + return hash; + } + } +} diff --git a/.old 2/DTLib/SecureRandom.cs b/.old 2/DTLib/SecureRandom.cs new file mode 100644 index 0000000..98217cf --- /dev/null +++ b/.old 2/DTLib/SecureRandom.cs @@ -0,0 +1,37 @@ +using System.Security.Cryptography; + +namespace DTLib +{ + // + // Вычисление псевдослучайного числа из множества параметров. + // Работает медленнее чем класс System.Random, но производит более случайные значения + // + public class SecureRandom + { + private RNGCryptoServiceProvider crypt = new RNGCryptoServiceProvider(); + + // получение массива случайных байтов + public byte[] NextBytes(uint length) + { + byte[] output = new byte[length]; + crypt.GetNonZeroBytes(output); + return output; + } + + // получение случайного числа от 0 до 2147483647 + /*public int NextInt(uint from, int to) + { + int output = 0; + int rez = 0; + while (true) + { + rez = output * 10 + NextBytes(1)[0]; + if (rez < to && rez > from) + { + output = rez; + return output; + } + } + }*/ + } +} diff --git a/.old 2/DTLib/SimpleConverter.cs b/.old 2/DTLib/SimpleConverter.cs new file mode 100644 index 0000000..9f6c1a3 --- /dev/null +++ b/.old 2/DTLib/SimpleConverter.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTLib +{ + // + // содержит методы расширения для конвертации байт в строку и наоборот + // + public static class SimpleConverter + { + static public Encoding UTF8 = new UTF8Encoding(false); + // байты в кодировке UTF8 в строку + static public string ToStr(this byte[] bytes) + { + return UTF8.GetString(bytes); + } + static public string ToStr(this List bytes) + { + return UTF8.GetString(bytes.ToArray()); + } + + static public List ToList(this byte[] input) + { + var list = new List(); + list.AddRange(input); + return list; + } + + static public byte[] Remove(this byte[] input, int startIndex, int count) + { + List list = input.ToList(); + list.RemoveRange(startIndex, count); + return list.ToArray(); + } + + // строку в байты + static public byte[] ToBytes(this string str) + { + return UTF8.GetBytes(str); + } + + // хеш в виде массива байт в строку (хеш изначально не в кодировке UTF8, так что метод выше не работает с ним) + static public string HashToString(this byte[] hash) + { + var builder = new StringBuilder(); + for (int i = 0; i < hash.Length; i++) + { + builder.Append(hash[i].ToString("x2")); + } + return builder.ToString(); + } + + static public bool StartsWith(this byte[] source, byte[] startsWith) + { + for (int i = 0; i < startsWith.Length; i++) + { + if (source[i] != startsWith[i]) + return false; + } + return true; + } + + static public bool StartsWith(this byte[] source, string startsWith) + => StartsWith(source, startsWith.ToBytes()); + + static public bool EndsWith(this byte[] source, byte[] endsWith) + { + for (int i = 0; i < endsWith.Length; i++) + { + if (source[source.Length - endsWith.Length + i] != endsWith[i]) + return false; + } + return true; + } + static public bool EndsWith(this byte[] source, string endsWith) + => EndsWith(source, endsWith.ToBytes()); + + static public int Truncate(decimal number) + => Convert.ToInt32(Math.Truncate(number)); + } +} diff --git a/.old 2/DTLib/TImer.cs b/.old 2/DTLib/TImer.cs new file mode 100644 index 0000000..2383078 --- /dev/null +++ b/.old 2/DTLib/TImer.cs @@ -0,0 +1,31 @@ +using System; +using System.Threading; + +namespace DTLib +{ + public class Timer + { + public Thread TimerThread; + bool Repeat; + public Timer(bool repeat, int delay, Action method) + { + Repeat = repeat; + TimerThread = new Thread(() => + { + do + { + Thread.Sleep(delay); + method(); + } while (Repeat); + }); + TimerThread.Start(); + } + + public void Stop() + { + Repeat = false; + //throw new Exception("thread stop\n"); + TimerThread.Abort(); + } + } +} diff --git a/.old 2/dtlauncher-client-win/App.config b/.old 2/dtlauncher-client-win/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/.old 2/dtlauncher-client-win/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.old 2/dtlauncher-client-win/App.xaml b/.old 2/dtlauncher-client-win/App.xaml new file mode 100644 index 0000000..87bbcc3 --- /dev/null +++ b/.old 2/dtlauncher-client-win/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/.old 2/dtlauncher-client-win/App.xaml.cs b/.old 2/dtlauncher-client-win/App.xaml.cs new file mode 100644 index 0000000..4aa3d80 --- /dev/null +++ b/.old 2/dtlauncher-client-win/App.xaml.cs @@ -0,0 +1,11 @@ +using System.Windows; + +namespace dtlauncher_client_win +{ + /// + /// Логика взаимодействия для App.xaml + /// + public partial class App : Application + { + } +} diff --git a/.old 2/dtlauncher-client-win/LauncherWindow.xaml b/.old 2/dtlauncher-client-win/LauncherWindow.xaml new file mode 100644 index 0000000..7b406c3 --- /dev/null +++ b/.old 2/dtlauncher-client-win/LauncherWindow.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/.old 2/dtlauncher-client-win/LauncherWindow.xaml.cs b/.old 2/dtlauncher-client-win/LauncherWindow.xaml.cs new file mode 100644 index 0000000..f920ce1 --- /dev/null +++ b/.old 2/dtlauncher-client-win/LauncherWindow.xaml.cs @@ -0,0 +1,46 @@ +using DTLib; +using System; +using System.Net; +using System.Net.Sockets; +using System.Windows; +using static DTLib.NetWork; + +namespace dtlauncher_client_win +{ + /// + /// Логика взаимодействия для LauncherWindow.xaml + /// + public partial class LauncherWindow : Window + { + Socket socket; + string logfile; + + public LauncherWindow(Socket _socket, string _logfile) + { + InitializeComponent(); + socket = _socket; + logfile = _logfile; + NetWork.Log += Log; + //mainSocket.FSP_Download(new FSP_FileObject("share\\file.arc", "downloads\\file.arc")); + } + + void Log(string msg) + { + msg = "[" + DateTime.Now.ToString() + "]: " + msg; + FileWork.Log(logfile, msg); + //LogBox.Text += msg; + } + + void Log(string[] input) + { + if (input.Length % 2 == 0) + { + string str = ""; + for (ushort i = 0; i < input.Length; i++) + str += input[++i]; + Log(str); + } + else throw new Exception("error in Log(): every text string must have color string before"); + } + } +} diff --git a/.old 2/dtlauncher-client-win/LoginWindow.xaml b/.old 2/dtlauncher-client-win/LoginWindow.xaml new file mode 100644 index 0000000..c5b0e39 --- /dev/null +++ b/.old 2/dtlauncher-client-win/LoginWindow.xaml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + +