From d7f0d6eb18ab4bae6ea221071360323c1f6bf022 Mon Sep 17 00:00:00 2001 From: Georgy Khatuncev Date: Fri, 28 May 2021 20:53:14 +0500 Subject: [PATCH] Socket 2 --- DataClient/Config/config.json | 16 + DataClient/DataClient.csproj | 26 + DataClient/DataClient.csproj.user | 6 + DataClient/NETClient.cs | 66 +++ .../PublishProfiles/FolderProfile.pubxml | 12 + .../PublishProfiles/FolderProfile.pubxml.user | 9 + DataClient/Properties/launchSettings.json | 7 + DataClient/STPClient.cs | 236 ++++++++++ DataClient/Struct.cs | 30 ++ .../obj/DataClient.csproj.nuget.dgspec.json | 83 ++++ .../obj/DataClient.csproj.nuget.g.props | 21 + .../obj/DataClient.csproj.nuget.g.targets | 6 + ...CoreApp,Version=v5.0.AssemblyAttributes.cs | 4 + .../Debug/net5.0/DataClient.AssemblyInfo.cs | 23 + .../DataClient.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 8 + .../obj/Debug/net5.0/DataClient.assets.cache | Bin 0 -> 5279 bytes .../DataClient.csprojAssemblyReference.cache | Bin 0 -> 110010 bytes DataClient/obj/project.assets.json | 444 ++++++++++++++++++ DataClient/obj/project.nuget.cache | 19 + Tests/bin/Debug/netcoreapp3.1/04.txt | 2 + 21 files changed, 1019 insertions(+) create mode 100644 DataClient/Config/config.json create mode 100644 DataClient/DataClient.csproj create mode 100644 DataClient/DataClient.csproj.user create mode 100644 DataClient/NETClient.cs create mode 100644 DataClient/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 DataClient/Properties/PublishProfiles/FolderProfile.pubxml.user create mode 100644 DataClient/Properties/launchSettings.json create mode 100644 DataClient/STPClient.cs create mode 100644 DataClient/Struct.cs create mode 100644 DataClient/obj/DataClient.csproj.nuget.dgspec.json create mode 100644 DataClient/obj/DataClient.csproj.nuget.g.props create mode 100644 DataClient/obj/DataClient.csproj.nuget.g.targets create mode 100644 DataClient/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs create mode 100644 DataClient/obj/Debug/net5.0/DataClient.AssemblyInfo.cs create mode 100644 DataClient/obj/Debug/net5.0/DataClient.AssemblyInfoInputs.cache create mode 100644 DataClient/obj/Debug/net5.0/DataClient.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DataClient/obj/Debug/net5.0/DataClient.assets.cache create mode 100644 DataClient/obj/Debug/net5.0/DataClient.csprojAssemblyReference.cache create mode 100644 DataClient/obj/project.assets.json create mode 100644 DataClient/obj/project.nuget.cache create mode 100644 Tests/bin/Debug/netcoreapp3.1/04.txt diff --git a/DataClient/Config/config.json b/DataClient/Config/config.json new file mode 100644 index 0000000..f71d35f --- /dev/null +++ b/DataClient/Config/config.json @@ -0,0 +1,16 @@ +{ + "servers": [ + { + "name": "STP 1", + "ip": "10.10.45.151", + "port": 1070, + "dir": "Y:\\data" + }, + { + "name": "STP 2", + "ip": "10.10.45.152", + "port": 1070, + "dir": "Z:\\data" + } + ] +} diff --git a/DataClient/DataClient.csproj b/DataClient/DataClient.csproj new file mode 100644 index 0000000..015554f --- /dev/null +++ b/DataClient/DataClient.csproj @@ -0,0 +1,26 @@ + + + + net5.0 + DataClient + DataClient + 0.0.3 + + + + + + + + + + + + + + + Always + + + + diff --git a/DataClient/DataClient.csproj.user b/DataClient/DataClient.csproj.user new file mode 100644 index 0000000..b75df9c --- /dev/null +++ b/DataClient/DataClient.csproj.user @@ -0,0 +1,6 @@ + + + + <_LastSelectedProfileId>D:\GIT\ASCKU_PC\STPClient\Properties\PublishProfiles\FolderProfile.pubxml + + \ No newline at end of file diff --git a/DataClient/NETClient.cs b/DataClient/NETClient.cs new file mode 100644 index 0000000..d52d5ab --- /dev/null +++ b/DataClient/NETClient.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using NLog; + +namespace DataClient +{ + public class NETClient + { + private Logger log = LogManager.GetCurrentClassLogger(); + private string ip = "127.0.0.1"; + public string Ip + { + get { return ip; } + set + { + if (!IPAddress.TryParse(value, out _)) + throw new Exception("Wrong ip address."); + else + ip = value; + } + } + private int port = 1070; + public int Port + { + get { return port; } + set + { + if (value < 1 && value > 65535) + throw new Exception("Wrong port."); + else + port = value; + } + } + + private enum Code : uint + { + check_command = 4294967295, + version = 0, + pasp_download = 4, + download_nh = 21, + dir_browse = 23, + user_flags = 26 + } + + //Construction + public NETClient(string ip, int port) + { + Ip = ip; + Port = port; + } + + + //Work with socket functions + + + //Support functions + + + //Main functions + + } +} diff --git a/DataClient/Properties/PublishProfiles/FolderProfile.pubxml b/DataClient/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..97d40c8 --- /dev/null +++ b/DataClient/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,12 @@ + + + + + Release + Any CPU + ..\Release\DataClient\ + FileSystem + + \ No newline at end of file diff --git a/DataClient/Properties/PublishProfiles/FolderProfile.pubxml.user b/DataClient/Properties/PublishProfiles/FolderProfile.pubxml.user new file mode 100644 index 0000000..a7e830d --- /dev/null +++ b/DataClient/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -0,0 +1,9 @@ + + + + + True|2021-05-27T05:25:25.8638099Z;True|2021-05-27T10:16:30.2483150+05:00; + + \ No newline at end of file diff --git a/DataClient/Properties/launchSettings.json b/DataClient/Properties/launchSettings.json new file mode 100644 index 0000000..433eb01 --- /dev/null +++ b/DataClient/Properties/launchSettings.json @@ -0,0 +1,7 @@ +{ + "profiles": { + "DataClient": { + "commandName": "Project" + } + } +} \ No newline at end of file diff --git a/DataClient/STPClient.cs b/DataClient/STPClient.cs new file mode 100644 index 0000000..4f0a86a --- /dev/null +++ b/DataClient/STPClient.cs @@ -0,0 +1,236 @@ +using System; +using System.IO; +using System.Collections.Generic; +using NLog; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using DataClient.Struct; +using System.Net; + +namespace DataClient +{ + /// + /// Класс для связи с СТП. Содержит все инструменты, для получения данных. + /// + public class STPClient + { + //Переменные + Logger log = LogManager.GetCurrentClassLogger(); + string confDir = Path.Combine(Directory.GetCurrentDirectory(), "Config", "config.json"); + private List servers = new List(); + int serverDefault = -1; + //Геттеры и сеттеры + /// Номер сервера, используемого по умолчанию. + public int UseServer + { + get { return serverDefault; } + set { + serverDefault = + (servers.Count == 0) ? -1 : + (value < 0) ? 0 : + (value >= servers.Count) ? serverDefault = servers.Count - 1 : + value; + } + } + /// Массив серверов, инициализированных в экземпляре класса. + public server[] ListServers { get { return servers.ToArray(); } } + + //Функции + /// Получение номера сервера по его названию. + /// Название сервера. + /// Номер сервера в списке серверов. + public int GetServerIdByName(string name) + { + return servers.FindIndex(x => x.name == name); + } + /// Получение название сервера по его номеру. + /// Номер сервера в списке серверов. + /// Название сервера. + public string GetServerNameById(int id) + { + var res = (id >= servers.Count || id < 0) ? null : servers[id].name; + return res; + } + /// Проверка параметров серевера перед их добавлением в список. + /// IP адресс сервера. + /// Порт сервера. + /// Путь к архиву. + /// Результат выполнения функции. + private bool CheckDataServer(string ip, int port, string dir) + { + if (!IPAddress.TryParse(ip, out _)) + { + log.Warn("Ip address incorrect: " + ip + " ."); + return false; + } + if (port < 1 && port > 65535) + { + log.Warn("Port incorrect: " + port.ToString() + "."); + return false; + } + if (!Directory.Exists(dir)) + { + log.Warn("Directory incorrect or not exist: " + dir + " ."); + return false; + } + return true; + } + /// Добавление сервера в список серверов. + /// Название сервера + /// IP адресс сервера. + /// Порт сервера. + /// Путь к архиву. + /// Результат выполнения функции. + public bool AddServer(string name, string ip, int port, string dir) + { + if (!CheckDataServer(ip, port, dir)) + { + log.Warn("Server not added: Data incorrect."); + return false; + } + if (string.IsNullOrEmpty(name)) + { + log.Warn("Server not added: Incorrect name server."); + return false; + } + if (servers.FindIndex(x => x.name == name) != -1) + { + log.Warn("Server not added: Server with this name exist."); + return false; + } + servers.Add(new server(name, ip, port, dir)); + UseServer = 0; + log.Trace("Server (name=" + name + ";ip=" + ip + ";port=" + port + ";dir=" + dir + ") added."); + return true; + } + /// Изменение сервера в списке серверов по его номеру. + /// Номер сервера в списке серверов. + /// Название сервера. + /// IP адресс сервера. + /// Порт сервера. + /// Путь к архиву. + /// Результат выполнения функции. + public bool ChangeServerById(int id, string name, string ip, int port, string dir) + { + if (servers.Count == 0 || id >= servers.Count || id < 0) + { + log.Warn("Server not changed: Id incorrect."); + return false; + } + if (!CheckDataServer(ip, port, dir)) + { + log.Warn("Server not changed: Data incorrect."); + return false; + } + var tmpId = servers.FindIndex(x => x.name == name); + if (string.IsNullOrEmpty(name) || (tmpId != -1 && tmpId != id)) + { + log.Warn("Server not changed: Name incorrect."); + return false; + } + var tmp = new server(name, ip, port, dir); + log.Trace("Server id=" + id + " changed: name=" + name + ";ip=" + ip + ";port=" + port.ToString() + ";dir=" + dir + ";."); + servers[id] = tmp; + return true; + } + /// Изменение сервера в списке серверов по его названию. + /// Название сервера. + /// IP адресс сервера. + /// Порт сервера. + /// Путь к архиву. + /// Результат выполнения функции. + public bool ChangeServerByName(string name, string ip, int port, string dir) + { + var id = servers.FindIndex(x => x.name == name); + if (id == -1) + { + log.Warn("Server not changed: Name incorrect or server not exist."); + return false; + } + return ChangeServerById(id, name, ip, port, dir); + } + /// Удаление сервера из списка серверов по его номеру. + /// Номер сервера в списке серверов. + /// Результат выполнения функции. + public bool RemoveServerById(int id) + { + if (servers.Count == 0 || id >= servers.Count || id < 0) + { + log.Warn("Server not removed: Id incorrect or list server are empty."); + return false; + } + log.Trace("Server id=" + id.ToString() + ";name=" + servers[id].name + ";ip=" + servers[id].ip + ";port=" + servers[id].port.ToString() + ";dir=" + servers[id].dir + "; removed."); + servers.RemoveAt(id); + UseServer = 0; + return true; + } + /// Удаление сервера из списка серверов по его названию. + /// Название сервера. + /// Результат выполнения функции. + public bool RemoveServerByName(string name) + { + var id = servers.FindIndex(x => x.name == name); + if (id == -1) + { + log.Warn("Server not removed: Name incorrect or server not exist."); + return false; + } + return RemoveServerById(id); + } + /// Чтение конфигурационнного файла и установка параметров по умолчанию. + private void Config() + { + string jsonString; + try + { + jsonString = File.ReadAllText(confDir); + } + catch (Exception e) + { + log.Warn(e, "Can't read config file from " + confDir + "."); + return; + } + var conf = (JObject)JsonConvert.DeserializeObject(jsonString); + if (!conf.HasValues && !conf["servers"].HasValues && conf["servers"].Type != JTokenType.Array) + { + log.Warn("Doesn't exist \"servers\" object in config file."); + return; + } + var count = -1; + foreach (var s in conf["servers"]) + { + count++; + var name = (s["name"].Type == JTokenType.String) ? (string)s["name"] : "default"; + var ip = (s["ip"].Type == JTokenType.String) ? (string)s["ip"] : ""; + var port = (s["port"].Type == JTokenType.Integer) ? (int)s["port"] : -1; + var dir = (s["dir"].Type == JTokenType.String) ? (string)s["dir"] : ""; + var res = false; + if (GetServerIdByName(name) == -1) + res = AddServer(name, ip, port, dir); + else + res = ChangeServerByName(name, ip, port, dir); + if (!res) + log.Trace("Can't add or change server #" + count + " from conf file."); + } + } + /// Создание экземпляра класса. + public STPClient() + { + log.Trace("Create instance class."); + Config(); + } + /// Создание экземпляра класса с указанием конфигурационного файла. + /// Путь к файлу конфигурации. + public STPClient(string confDir) + { + log.Trace("Create instance class with dir:" + confDir + "."); + this.confDir = confDir; + Config(); + } + + + + + } + +} \ No newline at end of file diff --git a/DataClient/Struct.cs b/DataClient/Struct.cs new file mode 100644 index 0000000..d550387 --- /dev/null +++ b/DataClient/Struct.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataClient.Struct +{ + public struct server + { + public string name; + public string ip; + public int port; + public string dir; + public server(string Ip, int Port, string Dir) + { + name = "default"; + ip = Ip; + port = Port; + dir = Dir; + } + public server(string Name, string Ip, int Port, string Dir) + { + name = Name; + ip = Ip; + port = Port; + dir = Dir; + } + } +} diff --git a/DataClient/obj/DataClient.csproj.nuget.dgspec.json b/DataClient/obj/DataClient.csproj.nuget.dgspec.json new file mode 100644 index 0000000..912f7b5 --- /dev/null +++ b/DataClient/obj/DataClient.csproj.nuget.dgspec.json @@ -0,0 +1,83 @@ +{ + "format": 1, + "restore": { + "D:\\GIT\\ASCKU_PC\\DataClient\\DataClient.csproj": {} + }, + "projects": { + "D:\\GIT\\ASCKU_PC\\DataClient\\DataClient.csproj": { + "version": "0.0.3", + "restore": { + "projectUniqueName": "D:\\GIT\\ASCKU_PC\\DataClient\\DataClient.csproj", + "projectName": "DataClient", + "projectPath": "D:\\GIT\\ASCKU_PC\\DataClient\\DataClient.csproj", + "packagesPath": "C:\\Users\\google\\.nuget\\packages\\", + "outputPath": "D:\\GIT\\ASCKU_PC\\DataClient\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\google\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config" + ], + "originalTargetFrameworks": [ + "net5.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net5.0": { + "targetAlias": "net5.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net5.0": { + "targetAlias": "net5.0", + "dependencies": { + "NLog": { + "target": "Package", + "version": "[4.7.10, )" + }, + "NLog.Extensions.Logging": { + "target": "Package", + "version": "[1.7.2, )" + }, + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.1, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.201\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/DataClient/obj/DataClient.csproj.nuget.g.props b/DataClient/obj/DataClient.csproj.nuget.g.props new file mode 100644 index 0000000..471ec1a --- /dev/null +++ b/DataClient/obj/DataClient.csproj.nuget.g.props @@ -0,0 +1,21 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\google\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder + PackageReference + 5.9.0 + + + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + \ No newline at end of file diff --git a/DataClient/obj/DataClient.csproj.nuget.g.targets b/DataClient/obj/DataClient.csproj.nuget.g.targets new file mode 100644 index 0000000..53cfaa1 --- /dev/null +++ b/DataClient/obj/DataClient.csproj.nuget.g.targets @@ -0,0 +1,6 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + \ No newline at end of file diff --git a/DataClient/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs b/DataClient/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2f7e5ec --- /dev/null +++ b/DataClient/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v5.0", FrameworkDisplayName = "")] diff --git a/DataClient/obj/Debug/net5.0/DataClient.AssemblyInfo.cs b/DataClient/obj/Debug/net5.0/DataClient.AssemblyInfo.cs new file mode 100644 index 0000000..0f69854 --- /dev/null +++ b/DataClient/obj/Debug/net5.0/DataClient.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("DataClient")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("0.0.3.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("0.0.3")] +[assembly: System.Reflection.AssemblyProductAttribute("DataClient")] +[assembly: System.Reflection.AssemblyTitleAttribute("DataClient")] +[assembly: System.Reflection.AssemblyVersionAttribute("0.0.3.0")] + +// Создано классом WriteCodeFragment MSBuild. + diff --git a/DataClient/obj/Debug/net5.0/DataClient.AssemblyInfoInputs.cache b/DataClient/obj/Debug/net5.0/DataClient.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1389bef --- /dev/null +++ b/DataClient/obj/Debug/net5.0/DataClient.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +cc24590fdc5285a811154f711782659f77a86794 diff --git a/DataClient/obj/Debug/net5.0/DataClient.GeneratedMSBuildEditorConfig.editorconfig b/DataClient/obj/Debug/net5.0/DataClient.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..d7e2983 --- /dev/null +++ b/DataClient/obj/Debug/net5.0/DataClient.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,8 @@ +is_global = true +build_property.TargetFramework = net5.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.PublishSingleFile = +build_property.IncludeAllContentForSelfExtract = +build_property._SupportedPlatformList = Android,iOS,Linux,macOS,Windows diff --git a/DataClient/obj/Debug/net5.0/DataClient.assets.cache b/DataClient/obj/Debug/net5.0/DataClient.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..520dc202c50d4413719b6e1e628d846f50d8068d GIT binary patch literal 5279 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 literal 0 HcmV?d00001 diff --git a/DataClient/obj/project.assets.json b/DataClient/obj/project.assets.json new file mode 100644 index 0000000..2656e41 --- /dev/null +++ b/DataClient/obj/project.assets.json @@ -0,0 +1,444 @@ +{ + "version": 3, + "targets": { + "net5.0": { + "Microsoft.Extensions.Configuration.Abstractions/5.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "5.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": {} + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": {} + } + }, + "Microsoft.Extensions.DependencyInjection/5.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" + }, + "compile": { + "lib/net5.0/Microsoft.Extensions.DependencyInjection.dll": {} + }, + "runtime": { + "lib/net5.0/Microsoft.Extensions.DependencyInjection.dll": {} + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {} + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {} + } + }, + "Microsoft.Extensions.Logging/5.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0" + }, + "compile": { + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll": {} + }, + "runtime": { + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll": {} + } + }, + "Microsoft.Extensions.Logging.Abstractions/5.0.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {} + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {} + } + }, + "Microsoft.Extensions.Options/5.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + }, + "compile": { + "lib/net5.0/Microsoft.Extensions.Options.dll": {} + }, + "runtime": { + "lib/net5.0/Microsoft.Extensions.Options.dll": {} + } + }, + "Microsoft.Extensions.Primitives/5.0.0": { + "type": "package", + "compile": { + "lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll": {} + }, + "runtime": { + "lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll": {} + } + }, + "Newtonsoft.Json/13.0.1": { + "type": "package", + "compile": { + "lib/netstandard2.0/Newtonsoft.Json.dll": {} + }, + "runtime": { + "lib/netstandard2.0/Newtonsoft.Json.dll": {} + } + }, + "NLog/4.7.10": { + "type": "package", + "compile": { + "lib/netstandard2.0/NLog.dll": {} + }, + "runtime": { + "lib/netstandard2.0/NLog.dll": {} + } + }, + "NLog.Extensions.Logging/1.7.2": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "NLog": "4.7.9" + }, + "compile": { + "lib/net5.0/NLog.Extensions.Logging.dll": {} + }, + "runtime": { + "lib/net5.0/NLog.Extensions.Logging.dll": {} + } + } + } + }, + "libraries": { + "Microsoft.Extensions.Configuration.Abstractions/5.0.0": { + "sha512": "ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net461/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.5.0.0.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection/5.0.0": { + "sha512": "Rc2kb/p3Ze6cP6rhFC3PJRdWGbLvSHZc0ev7YlyeU6FmHciDMLrhoVoTUEzKPhN5ZjFgKF1Cf5fOz8mCMIkvpA==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Extensions.DependencyInjection.dll", + "lib/net461/Microsoft.Extensions.DependencyInjection.xml", + "lib/net5.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net5.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", + "microsoft.extensions.dependencyinjection.5.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { + "sha512": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net461/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.Extensions.Logging/5.0.0": { + "sha512": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==", + "type": "package", + "path": "microsoft.extensions.logging/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Extensions.Logging.dll", + "lib/net461/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.1/Microsoft.Extensions.Logging.xml", + "microsoft.extensions.logging.5.0.0.nupkg.sha512", + "microsoft.extensions.logging.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.Extensions.Logging.Abstractions/5.0.0": { + "sha512": "NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w==", + "type": "package", + "path": "microsoft.extensions.logging.abstractions/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net461/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", + "microsoft.extensions.logging.abstractions.5.0.0.nupkg.sha512", + "microsoft.extensions.logging.abstractions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.Extensions.Options/5.0.0": { + "sha512": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==", + "type": "package", + "path": "microsoft.extensions.options/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Extensions.Options.dll", + "lib/net461/Microsoft.Extensions.Options.xml", + "lib/net5.0/Microsoft.Extensions.Options.dll", + "lib/net5.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.xml", + "microsoft.extensions.options.5.0.0.nupkg.sha512", + "microsoft.extensions.options.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.Extensions.Primitives/5.0.0": { + "sha512": "cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ==", + "type": "package", + "path": "microsoft.extensions.primitives/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Extensions.Primitives.dll", + "lib/net461/Microsoft.Extensions.Primitives.xml", + "lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll", + "lib/netcoreapp3.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.5.0.0.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Newtonsoft.Json/13.0.1": { + "sha512": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", + "type": "package", + "path": "newtonsoft.json/13.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/netstandard1.3/Newtonsoft.Json.dll", + "lib/netstandard1.3/Newtonsoft.Json.xml", + "lib/netstandard2.0/Newtonsoft.Json.dll", + "lib/netstandard2.0/Newtonsoft.Json.xml", + "newtonsoft.json.13.0.1.nupkg.sha512", + "newtonsoft.json.nuspec", + "packageIcon.png" + ] + }, + "NLog/4.7.10": { + "sha512": "rcegW7kYOCjl7wX0SzsqpPBqnJ51JKi1WkYb6QBVX0Wc5IgH19Pv4t/co+T0s06OS0Ne44xgkY/mHg0PdrmJow==", + "type": "package", + "path": "nlog/4.7.10", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/monoandroid44/NLog.dll", + "lib/monoandroid44/NLog.xml", + "lib/net35/NLog.dll", + "lib/net35/NLog.xml", + "lib/net40-client/NLog.dll", + "lib/net40-client/NLog.xml", + "lib/net45/NLog.dll", + "lib/net45/NLog.xml", + "lib/netstandard1.3/NLog.dll", + "lib/netstandard1.3/NLog.xml", + "lib/netstandard1.5/NLog.dll", + "lib/netstandard1.5/NLog.xml", + "lib/netstandard2.0/NLog.dll", + "lib/netstandard2.0/NLog.xml", + "lib/sl4/NLog.dll", + "lib/sl4/NLog.xml", + "lib/sl5/NLog.dll", + "lib/sl5/NLog.xml", + "lib/wp8/NLog.dll", + "lib/wp8/NLog.xml", + "lib/xamarinios10/NLog.dll", + "lib/xamarinios10/NLog.xml", + "nlog.4.7.10.nupkg.sha512", + "nlog.nuspec" + ] + }, + "NLog.Extensions.Logging/1.7.2": { + "sha512": "0y1QziAUCdePQc4itPOQF3xDcs0iE9NHlIK0hE0eA0+Ef6E9dnJDPveNu7w2ckYaDfJIFHpOoLK8sZmNEyiBCw==", + "type": "package", + "path": "nlog.extensions.logging/1.7.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "N.png", + "lib/net451/NLog.Extensions.Logging.dll", + "lib/net451/NLog.Extensions.Logging.xml", + "lib/net461/NLog.Extensions.Logging.dll", + "lib/net461/NLog.Extensions.Logging.xml", + "lib/net5.0/NLog.Extensions.Logging.dll", + "lib/net5.0/NLog.Extensions.Logging.xml", + "lib/netcoreapp3.0/NLog.Extensions.Logging.dll", + "lib/netcoreapp3.0/NLog.Extensions.Logging.xml", + "lib/netstandard1.3/NLog.Extensions.Logging.dll", + "lib/netstandard1.3/NLog.Extensions.Logging.xml", + "lib/netstandard1.5/NLog.Extensions.Logging.dll", + "lib/netstandard1.5/NLog.Extensions.Logging.xml", + "lib/netstandard2.0/NLog.Extensions.Logging.dll", + "lib/netstandard2.0/NLog.Extensions.Logging.xml", + "nlog.extensions.logging.1.7.2.nupkg.sha512", + "nlog.extensions.logging.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + "net5.0": [ + "NLog >= 4.7.10", + "NLog.Extensions.Logging >= 1.7.2", + "Newtonsoft.Json >= 13.0.1" + ] + }, + "packageFolders": { + "C:\\Users\\google\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, + "C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\": {}, + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} + }, + "project": { + "version": "0.0.3", + "restore": { + "projectUniqueName": "D:\\GIT\\ASCKU_PC\\DataClient\\DataClient.csproj", + "projectName": "DataClient", + "projectPath": "D:\\GIT\\ASCKU_PC\\DataClient\\DataClient.csproj", + "packagesPath": "C:\\Users\\google\\.nuget\\packages\\", + "outputPath": "D:\\GIT\\ASCKU_PC\\DataClient\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\google\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config" + ], + "originalTargetFrameworks": [ + "net5.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net5.0": { + "targetAlias": "net5.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net5.0": { + "targetAlias": "net5.0", + "dependencies": { + "NLog": { + "target": "Package", + "version": "[4.7.10, )" + }, + "NLog.Extensions.Logging": { + "target": "Package", + "version": "[1.7.2, )" + }, + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.1, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.201\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/DataClient/obj/project.nuget.cache b/DataClient/obj/project.nuget.cache new file mode 100644 index 0000000..1486ebf --- /dev/null +++ b/DataClient/obj/project.nuget.cache @@ -0,0 +1,19 @@ +{ + "version": 2, + "dgSpecHash": "fLzCMyL0TTYR6ScHYw8lseE4tuHRjlfRhsrbzgdqw/qeVRrQYigyT797G0cUiPOmrt1GVD0KWz3n3AZIE22bzQ==", + "success": true, + "projectFilePath": "D:\\GIT\\ASCKU_PC\\DataClient\\DataClient.csproj", + "expectedPackageFiles": [ + "C:\\Users\\google\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\5.0.0\\microsoft.extensions.configuration.abstractions.5.0.0.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\5.0.0\\microsoft.extensions.dependencyinjection.5.0.0.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\5.0.0\\microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\microsoft.extensions.logging\\5.0.0\\microsoft.extensions.logging.5.0.0.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\5.0.0\\microsoft.extensions.logging.abstractions.5.0.0.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\microsoft.extensions.options\\5.0.0\\microsoft.extensions.options.5.0.0.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\microsoft.extensions.primitives\\5.0.0\\microsoft.extensions.primitives.5.0.0.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\newtonsoft.json\\13.0.1\\newtonsoft.json.13.0.1.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\nlog\\4.7.10\\nlog.4.7.10.nupkg.sha512", + "C:\\Users\\google\\.nuget\\packages\\nlog.extensions.logging\\1.7.2\\nlog.extensions.logging.1.7.2.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/Tests/bin/Debug/netcoreapp3.1/04.txt b/Tests/bin/Debug/netcoreapp3.1/04.txt new file mode 100644 index 0000000..0de3bad --- /dev/null +++ b/Tests/bin/Debug/netcoreapp3.1/04.txt @@ -0,0 +1,2 @@ +2021-05-26 11:44:42.8 035 Отс. связь ГМП 01 +2021-05-26 11:44:43.4 035 Отс. связь ГМП 00