DTLib added as nuget packages
This commit is contained in:
parent
e3a3fb5e5e
commit
518ac74dc7
@ -1,5 +1,6 @@
|
|||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
|
using DTLib.Logging;
|
||||||
|
|
||||||
namespace Launcher.Client.Avalonia.GUI;
|
namespace Launcher.Client.Avalonia.GUI;
|
||||||
|
|
||||||
@ -10,9 +11,9 @@ public partial class LauncherWindow : Window
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
LogBox.Text = Logger.Buffer;
|
LogBox.Text = Logger.Buffer;
|
||||||
Logger.MessageSent += LogHandler;
|
Logger.MessageSent += LogHandler;
|
||||||
LogfileLabel.Content = Logger.LogfileName.Remove(0,Logger.LogfileName.LastIndexOf(Путь.Разд)+1);
|
LogfileLabel.Content = Logger.LogfileName.Remove(0,Logger.LogfileName.LastIndexOf(Path.Sep)+1);
|
||||||
LogfileLabel.PointerPressed += (_,_)=>
|
LogfileLabel.PointerPressed += (_,_)=>
|
||||||
Process.Start("explorer.exe", LauncherLogger.LogfileDir);
|
Process.Start("explorer.exe", LauncherLogger.LogfileDir.ToString()!);
|
||||||
LogfileLabel.PointerEnter += (_,_)=>LogfileLabel.Foreground=App.MySelectionColor;
|
LogfileLabel.PointerEnter += (_,_)=>LogfileLabel.Foreground=App.MySelectionColor;
|
||||||
LogfileLabel.PointerLeave += (_,_)=>LogfileLabel.Foreground=App.MyWhite;
|
LogfileLabel.PointerLeave += (_,_)=>LogfileLabel.Foreground=App.MyWhite;
|
||||||
LibraryButton.TabGrid = LibraryGrid;
|
LibraryButton.TabGrid = LibraryGrid;
|
||||||
@ -26,14 +27,14 @@ public partial class LauncherWindow : Window
|
|||||||
ProgramGrid.IsVisible = false;
|
ProgramGrid.IsVisible = false;
|
||||||
SelectTab(LibraryButton, null);
|
SelectTab(LibraryButton, null);
|
||||||
FillProgramsPanel();
|
FillProgramsPanel();
|
||||||
Logger.Log("launcher started");
|
Logger.LogInfo(nameof(LauncherWindow),"launcher started");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
throw new Exception("aaa");
|
throw new Exception("aaa");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogError("main window", ex);
|
LogError(nameof(LauncherWindow), ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,15 +59,15 @@ public partial class LauncherWindow : Window
|
|||||||
|
|
||||||
private void FillProgramsPanel()
|
private void FillProgramsPanel()
|
||||||
{
|
{
|
||||||
Logger.Log("reading descriptors...");
|
Logger.LogInfo(nameof(LauncherWindow),"reading descriptors...");
|
||||||
string[] descriptors = Directory.GetFiles("descriptors");
|
var descriptors = Directory.GetFiles("descriptors");
|
||||||
Programs = new Program[descriptors.Length];
|
Programs = new Program[descriptors.Length];
|
||||||
for (ushort i = 0; i < descriptors.Length; i++)
|
for (ushort i = 0; i < descriptors.Length; i++)
|
||||||
{
|
{
|
||||||
string descriptor = descriptors[i];
|
var descriptor = descriptors[i];
|
||||||
if(descriptor.EndsWith(".descriptor"))
|
if(descriptor.EndsWith(".descriptor"))
|
||||||
{
|
{
|
||||||
Logger.Log('\t'+descriptor);
|
Logger.LogInfo(nameof(LauncherWindow), descriptor.ToString());
|
||||||
Programs[i] = new Program(descriptors[i]);
|
Programs[i] = new Program(descriptors[i]);
|
||||||
ProgramsPanel.Children.Add(Programs[i].ProgramLabel);
|
ProgramsPanel.Children.Add(Programs[i].ProgramLabel);
|
||||||
Programs[i].ProgramSelectedEvent += SelectProgram;
|
Programs[i].ProgramSelectedEvent += SelectProgram;
|
||||||
@ -92,7 +93,7 @@ public partial class LauncherWindow : Window
|
|||||||
NameLabel.Content = selectedProg.Name;
|
NameLabel.Content = selectedProg.Name;
|
||||||
DescriptionBox.Text = selectedProg.Description;
|
DescriptionBox.Text = selectedProg.Description;
|
||||||
BackgroundImage.Source = new Bitmap(
|
BackgroundImage.Source = new Bitmap(
|
||||||
$"{Directory.GetCurrent()}{Путь.Разд}backgrounds{Путь.Разд}{selectedProg.BackgroundFile}");
|
$"{Directory.GetCurrent()}{Path.Sep}backgrounds{Path.Sep}{selectedProg.BackgroundFile}");
|
||||||
ProgramSettingsViever.Content = selectedProg.SettingsPanel;
|
ProgramSettingsViever.Content = selectedProg.SettingsPanel;
|
||||||
DisplayingProgram = selectedProg;
|
DisplayingProgram = selectedProg;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,6 @@ public partial class ProgramLabel : UserControl
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
NameLabel.Content = label;
|
NameLabel.Content = label;
|
||||||
IconImage.Source = new Bitmap(
|
IconImage.Source = new Bitmap(
|
||||||
$"{Directory.GetCurrent()}{Путь.Разд}icons{Путь.Разд}{icon}");
|
$"{Directory.GetCurrent()}{Path.Sep}icons{Path.Sep}{icon}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<RootNamespace>Launcher.Client.Avalonia</RootNamespace>
|
<RootNamespace>Launcher.Client.Avalonia</RootNamespace>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<Nullable>disable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
@ -24,9 +24,6 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib.Network\DTLib.Network.csproj" />
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib.Dtsod\DTLib.Dtsod.csproj" />
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib\DTLib.csproj" />
|
|
||||||
<ProjectReference Include="..\Launcher.Client\Launcher.Client.csproj" />
|
<ProjectReference Include="..\Launcher.Client\Launcher.Client.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,8 @@ global using DTLib.Extensions;
|
|||||||
global using Launcher.Client;
|
global using Launcher.Client;
|
||||||
global using static Launcher.Client.LauncherClient;
|
global using static Launcher.Client.LauncherClient;
|
||||||
global using static Launcher.Client.Avalonia.LauncherMain;
|
global using static Launcher.Client.Avalonia.LauncherMain;
|
||||||
|
using DTLib.Ben.Demystifier;
|
||||||
|
using DTLib.Logging;
|
||||||
using Launcher.Client.Avalonia.GUI;
|
using Launcher.Client.Avalonia.GUI;
|
||||||
|
|
||||||
namespace Launcher.Client.Avalonia;
|
namespace Launcher.Client.Avalonia;
|
||||||
@ -43,8 +45,8 @@ public static class LauncherMain
|
|||||||
|
|
||||||
public static void LogError(string context, Exception ex)
|
public static void LogError(string context, Exception ex)
|
||||||
{
|
{
|
||||||
string errmsg = $"{ex.Message}\n{ex.StackTrace}";
|
string errmsg = ex.ToStringDemystified();
|
||||||
MessageBox.Show($"{context} ERROR", errmsg);
|
MessageBox.Show($"{context} ERROR", errmsg);
|
||||||
Logger.Log(errmsg);
|
Logger.LogError("Main", errmsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -23,7 +23,7 @@ public class Program
|
|||||||
|
|
||||||
public event Action<Program> ProgramSelectedEvent;
|
public event Action<Program> ProgramSelectedEvent;
|
||||||
|
|
||||||
public Program(string descriptorFile)
|
public Program(IOPath descriptorFile)
|
||||||
{
|
{
|
||||||
DtsodV23 descriptor= new(File.ReadAllText(descriptorFile));
|
DtsodV23 descriptor= new(File.ReadAllText(descriptorFile));
|
||||||
Name = descriptor["name"];
|
Name = descriptor["name"];
|
||||||
@ -38,7 +38,7 @@ public class Program
|
|||||||
ProgramLabel = new ProgramLabel(Name, IconFile);
|
ProgramLabel = new ProgramLabel(Name, IconFile);
|
||||||
ProgramLabel.PointerPressed += (_, _) => ProgramSelectedEvent?.Invoke(this);
|
ProgramLabel.PointerPressed += (_, _) => ProgramSelectedEvent?.Invoke(this);
|
||||||
|
|
||||||
SettingsFile = $"settings{Путь.Разд}{Directory}.settings";
|
SettingsFile = $"settings{Path.Sep}{Directory}.settings";
|
||||||
Settings = File.Exists(SettingsFile)
|
Settings = File.Exists(SettingsFile)
|
||||||
? DtsodConverter.UpdateByDefault(
|
? DtsodConverter.UpdateByDefault(
|
||||||
new DtsodV23(File.ReadAllText(SettingsFile)),
|
new DtsodV23(File.ReadAllText(SettingsFile)),
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
|
using DTLib.Logging;
|
||||||
|
|
||||||
namespace Launcher.Client.WPF.GUI;
|
namespace Launcher.Client.WPF.GUI;
|
||||||
|
|
||||||
@ -9,9 +10,9 @@ public partial class LauncherWindow : Window
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
LogBox.Text = Logger.Buffer;
|
LogBox.Text = Logger.Buffer;
|
||||||
Logger.MessageSent += LogHandler;
|
Logger.MessageSent += LogHandler;
|
||||||
LogfileLabel.Content = Logger.LogfileName.Remove(0,Logger.LogfileName.LastIndexOf(Путь.Разд)+1);
|
LogfileLabel.Content = Logger.LogfileName.Remove(0,Logger.LogfileName.LastIndexOf(Path.Sep)+1);
|
||||||
LogfileLabel.MouseLeftButtonDown += (_,_)=>
|
LogfileLabel.MouseLeftButtonDown += (_,_)=>
|
||||||
Process.Start("explorer.exe", LauncherLogger.LogfileDir);
|
Process.Start("explorer.exe", LauncherLogger.LogfileDir.ToString()!);
|
||||||
LogfileLabel.MouseEnter += (_,_)=>LogfileLabel.Foreground=App.MySelectionColor;
|
LogfileLabel.MouseEnter += (_,_)=>LogfileLabel.Foreground=App.MySelectionColor;
|
||||||
LogfileLabel.MouseLeave += (_,_)=>LogfileLabel.Foreground=App.MyWhite;
|
LogfileLabel.MouseLeave += (_,_)=>LogfileLabel.Foreground=App.MyWhite;
|
||||||
LibraryButton.TabGrid = LibraryGrid;
|
LibraryButton.TabGrid = LibraryGrid;
|
||||||
@ -25,7 +26,7 @@ public partial class LauncherWindow : Window
|
|||||||
ProgramGrid.Visibility = Visibility.Hidden;
|
ProgramGrid.Visibility = Visibility.Hidden;
|
||||||
SelectTab(LibraryButton, null);
|
SelectTab(LibraryButton, null);
|
||||||
FillProgramsPanel();
|
FillProgramsPanel();
|
||||||
Logger.Log("launcher started");
|
Logger.LogInfo(nameof(LauncherWindow),"launcher started");
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogHandler(string m) => Dispatcher.Invoke(()=>LogBox.Text += m);
|
void LogHandler(string m) => Dispatcher.Invoke(()=>LogBox.Text += m);
|
||||||
@ -49,15 +50,15 @@ public partial class LauncherWindow : Window
|
|||||||
|
|
||||||
private void FillProgramsPanel()
|
private void FillProgramsPanel()
|
||||||
{
|
{
|
||||||
Logger.Log("reading descriptors...");
|
Logger.LogInfo(nameof(LauncherWindow),"reading descriptors...");
|
||||||
string[] descriptors = Directory.GetFiles("descriptors");
|
var descriptors = Directory.GetFiles("descriptors");
|
||||||
Programs = new Program[descriptors.Length];
|
Programs = new Program[descriptors.Length];
|
||||||
for (ushort i = 0; i < descriptors.Length; i++)
|
for (ushort i = 0; i < descriptors.Length; i++)
|
||||||
{
|
{
|
||||||
string descriptor = descriptors[i];
|
var descriptor = descriptors[i];
|
||||||
if(descriptor.EndsWith(".descriptor"))
|
if(descriptor.EndsWith(".descriptor"))
|
||||||
{
|
{
|
||||||
Logger.Log('\t'+descriptor);
|
Logger.LogInfo(nameof(LauncherWindow),descriptor.ToString());
|
||||||
Programs[i] = new Program(descriptors[i]);
|
Programs[i] = new Program(descriptors[i]);
|
||||||
ProgramsPanel.Children.Add(Programs[i].ProgramLabel);
|
ProgramsPanel.Children.Add(Programs[i].ProgramLabel);
|
||||||
Programs[i].ProgramSelectedEvent += SelectProgram;
|
Programs[i].ProgramSelectedEvent += SelectProgram;
|
||||||
@ -84,7 +85,7 @@ public partial class LauncherWindow : Window
|
|||||||
DescriptionBox.Text = selectedProg.Description;
|
DescriptionBox.Text = selectedProg.Description;
|
||||||
BackgroundImage.Source =
|
BackgroundImage.Source =
|
||||||
new BitmapImage(new Uri(
|
new BitmapImage(new Uri(
|
||||||
$"{Directory.GetCurrent()}{Путь.Разд}backgrounds{Путь.Разд}{selectedProg.BackgroundFile}",
|
$"{Directory.GetCurrent()}{Path.Sep}backgrounds{Path.Sep}{selectedProg.BackgroundFile}",
|
||||||
UriKind.Absolute));
|
UriKind.Absolute));
|
||||||
ProgramSettingsViever.Content = selectedProg.SettingsPanel;
|
ProgramSettingsViever.Content = selectedProg.SettingsPanel;
|
||||||
DisplayingProgram = selectedProg;
|
DisplayingProgram = selectedProg;
|
||||||
|
|||||||
@ -10,7 +10,7 @@ public partial class ProgramLabel : UserControl
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
NameLabel.Content = label;
|
NameLabel.Content = label;
|
||||||
IconImage.Source = new BitmapImage(new Uri(
|
IconImage.Source = new BitmapImage(new Uri(
|
||||||
$"{Directory.GetCurrent()}{Путь.Разд}icons{Путь.Разд}{icon}",
|
$"{Directory.GetCurrent()}{Path.Sep}icons{Path.Sep}{icon}",
|
||||||
UriKind.Absolute));
|
UriKind.Absolute));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<UseWPF>true</UseWPF>
|
<UseWPF>true</UseWPF>
|
||||||
<TargetFramework>net6.0-windows</TargetFramework>
|
<TargetFramework>net7.0-windows</TargetFramework>
|
||||||
<RootNamespace>Launcher.Client.WPF</RootNamespace>
|
<RootNamespace>Launcher.Client.WPF</RootNamespace>
|
||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<Nullable>disable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
@ -22,9 +22,6 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib.Network\DTLib.Network.csproj" />
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib.Dtsod\DTLib.Dtsod.csproj" />
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib\DTLib.csproj" />
|
|
||||||
<ProjectReference Include="..\Launcher.Client\Launcher.Client.csproj" />
|
<ProjectReference Include="..\Launcher.Client\Launcher.Client.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,8 @@ global using System.Windows;
|
|||||||
global using Launcher.Client;
|
global using Launcher.Client;
|
||||||
global using static Launcher.Client.LauncherClient;
|
global using static Launcher.Client.LauncherClient;
|
||||||
global using static Launcher.Client.WPF.LauncherMain;
|
global using static Launcher.Client.WPF.LauncherMain;
|
||||||
|
using DTLib.Ben.Demystifier;
|
||||||
|
using DTLib.Logging;
|
||||||
using Launcher.Client.WPF.GUI;
|
using Launcher.Client.WPF.GUI;
|
||||||
|
|
||||||
namespace Launcher.Client.WPF;
|
namespace Launcher.Client.WPF;
|
||||||
@ -22,6 +24,8 @@ public static class LauncherMain
|
|||||||
|
|
||||||
public static void _Main(string[] args)
|
public static void _Main(string[] args)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine("aaa\nbbb\nccc");
|
||||||
|
return;
|
||||||
LauncherClient.Init();
|
LauncherClient.Init();
|
||||||
CurrentLauncherWindow = new LauncherWindow();
|
CurrentLauncherWindow = new LauncherWindow();
|
||||||
CurrentLauncherWindow.Show();
|
CurrentLauncherWindow.Show();
|
||||||
@ -29,8 +33,8 @@ public static class LauncherMain
|
|||||||
|
|
||||||
public static void LogError(string context, Exception ex)
|
public static void LogError(string context, Exception ex)
|
||||||
{
|
{
|
||||||
string errmsg = $"{context} ERROR:\n{ex}";
|
string errmsg = ex.ToStringDemystified();
|
||||||
MessageBox.Show(errmsg);
|
MessageBox.Show(errmsg);
|
||||||
Logger.Log(errmsg);
|
Logger.LogError(context, errmsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -24,7 +24,7 @@ public class Program
|
|||||||
|
|
||||||
public event Action<Program> ProgramSelectedEvent;
|
public event Action<Program> ProgramSelectedEvent;
|
||||||
|
|
||||||
public Program(string descriptorFile)
|
public Program(IOPath descriptorFile)
|
||||||
{
|
{
|
||||||
DtsodV23 descriptor= new(File.ReadAllText(descriptorFile));
|
DtsodV23 descriptor= new(File.ReadAllText(descriptorFile));
|
||||||
Name = descriptor["name"];
|
Name = descriptor["name"];
|
||||||
@ -39,7 +39,7 @@ public class Program
|
|||||||
ProgramLabel = new ProgramLabel(Name, IconFile);
|
ProgramLabel = new ProgramLabel(Name, IconFile);
|
||||||
ProgramLabel.MouseLeftButtonDown += (_, _) => ProgramSelectedEvent?.Invoke(this);
|
ProgramLabel.MouseLeftButtonDown += (_, _) => ProgramSelectedEvent?.Invoke(this);
|
||||||
|
|
||||||
SettingsFile = $"settings{Путь.Разд}{Directory}.settings";
|
SettingsFile = $"settings{Path.Sep}{Directory}.settings";
|
||||||
Settings = File.Exists(SettingsFile)
|
Settings = File.Exists(SettingsFile)
|
||||||
? DtsodConverter.UpdateByDefault(
|
? DtsodConverter.UpdateByDefault(
|
||||||
new DtsodV23(File.ReadAllText(SettingsFile)),
|
new DtsodV23(File.ReadAllText(SettingsFile)),
|
||||||
|
|||||||
38
Launcher.Client/BufferedLogger.cs
Normal file
38
Launcher.Client/BufferedLogger.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using DTLib.Logging;
|
||||||
|
|
||||||
|
namespace Launcher.Client;
|
||||||
|
|
||||||
|
public class BufferedLogger : ILogger
|
||||||
|
{
|
||||||
|
public bool DebugLogEnabled { get; set; } =
|
||||||
|
#if DEBUG
|
||||||
|
true;
|
||||||
|
#else
|
||||||
|
false;
|
||||||
|
#endif
|
||||||
|
public bool InfoLogEnabled { get; set; } = true;
|
||||||
|
public bool WarnLogEnabled { get; set; } = true;
|
||||||
|
public bool ErrorLogEnabled { get; set; } = true;
|
||||||
|
|
||||||
|
public ILogFormat Format { get; set; } = new DefaultLogFormat();
|
||||||
|
|
||||||
|
private readonly StringBuilder _buffer = new();
|
||||||
|
public string Buffer
|
||||||
|
{
|
||||||
|
get { lock (_buffer) return _buffer.ToString(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public event Action<string> MessageSent;
|
||||||
|
|
||||||
|
|
||||||
|
public void Log(string context, LogSeverity severity, object message, ILogFormat format)
|
||||||
|
{
|
||||||
|
string msgConnected = Format.CreateMessage(context, severity, message);
|
||||||
|
MessageSent?.Invoke(msgConnected);
|
||||||
|
lock (_buffer) _buffer.Append(msgConnected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<Nullable>disable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
<RootNamespace>Launcher.Client</RootNamespace>
|
<RootNamespace>Launcher.Client</RootNamespace>
|
||||||
@ -10,12 +10,6 @@
|
|||||||
<Platforms>AnyCPU</Platforms>
|
<Platforms>AnyCPU</Platforms>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib.Network\DTLib.Network.csproj" />
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib.Dtsod\DTLib.Dtsod.csproj" />
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib\DTLib.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Remove="Resources\**\*" />
|
<Compile Remove="Resources\**\*" />
|
||||||
<EmbeddedResource Include="Resources\**\*" />
|
<EmbeddedResource Include="Resources\**\*" />
|
||||||
@ -23,4 +17,10 @@
|
|||||||
<None Update="debug_assets\**\*" CopyToOutputDirectory="Always" Condition="'$(Configuration)' == 'Debug'" />
|
<None Update="debug_assets\**\*" CopyToOutputDirectory="Always" Condition="'$(Configuration)' == 'Debug'" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="DTLib.Dtsod" Version="1.3.0" />
|
||||||
|
<PackageReference Include="DTLib.Logging" Version="1.3.0" />
|
||||||
|
<PackageReference Include="DTLib.Network" Version="1.3.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -8,6 +8,7 @@ global using DTLib;
|
|||||||
global using DTLib.Dtsod;
|
global using DTLib.Dtsod;
|
||||||
global using DTLib.Filesystem;
|
global using DTLib.Filesystem;
|
||||||
global using DTLib.Extensions;
|
global using DTLib.Extensions;
|
||||||
|
using DTLib.Logging;
|
||||||
|
|
||||||
namespace Launcher.Client;
|
namespace Launcher.Client;
|
||||||
|
|
||||||
@ -18,14 +19,14 @@ public static class LauncherClient
|
|||||||
|
|
||||||
public static void Init()
|
public static void Init()
|
||||||
{
|
{
|
||||||
Logger.Log("launcher starting...");
|
Logger.LogInfo(nameof(LauncherClient),"launcher starting...");
|
||||||
Config = new LauncherConfig();
|
Config = new LauncherConfig();
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
const string debug_assets = "debug_assets";
|
const string debug_assets = "debug_assets";
|
||||||
foreach (string file in Directory.GetFiles(debug_assets))
|
foreach (string file in Directory.GetFiles(debug_assets))
|
||||||
File.Copy(file, file.Remove(0, file.LastIndexOf(Путь.Разд) + 1), true);
|
File.Copy(file, file.Remove(0, file.LastIndexOf(Path.Sep) + 1), true);
|
||||||
foreach (string subdir in Directory.GetDirectories(debug_assets))
|
foreach (string subdir in Directory.GetDirectories(debug_assets))
|
||||||
Directory.Copy(subdir, subdir.Remove(0, subdir.LastIndexOf(Путь.Разд) + 1), true);
|
Directory.Copy(subdir, subdir.Remove(0, subdir.LastIndexOf(Path.Sep) + 1), true);
|
||||||
Directory.Delete(debug_assets);
|
Directory.Delete(debug_assets);
|
||||||
#endif
|
#endif
|
||||||
Directory.Create("descriptors");
|
Directory.Create("descriptors");
|
||||||
@ -33,7 +34,7 @@ public static class LauncherClient
|
|||||||
Directory.Create("backgrounds");
|
Directory.Create("backgrounds");
|
||||||
Directory.Create("installed");
|
Directory.Create("installed");
|
||||||
Directory.Create("settings");
|
Directory.Create("settings");
|
||||||
File.WriteAllText($"descriptors{Путь.Разд}default.descriptor.template",
|
File.WriteAllText($"descriptors{Path.Sep}default.descriptor.template",
|
||||||
EmbeddedResources.ReadText("Launcher.Client.Resources.default.descriptor.template"));
|
EmbeddedResources.ReadText("Launcher.Client.Resources.default.descriptor.template"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,30 +2,22 @@
|
|||||||
|
|
||||||
namespace Launcher.Client;
|
namespace Launcher.Client;
|
||||||
|
|
||||||
public class LauncherLogger : FileLogger
|
public class LauncherLogger : CompositeLogger
|
||||||
{
|
{
|
||||||
public const string LogfileDir = "launcher-logs";
|
public static readonly IOPath LogfileDir = "launcher-logs";
|
||||||
public LauncherLogger() : base(LogfileDir,"launcher-client") {}
|
public readonly string LogfileName;
|
||||||
|
|
||||||
private readonly StringBuilder _buffer = new();
|
|
||||||
public string Buffer
|
|
||||||
{
|
|
||||||
get { lock (_buffer) return _buffer.ToString(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public event Action<string> MessageSent;
|
public event Action<string> MessageSent;
|
||||||
|
public string Buffer => _bufferedLogger.Buffer;
|
||||||
|
|
||||||
public override void Log(params string[] msg)
|
|
||||||
|
FileLogger _fileLogger = new(LogfileDir,"launcher-client");
|
||||||
|
ConsoleLogger _consoleLogger = new();
|
||||||
|
BufferedLogger _bufferedLogger = new BufferedLogger();
|
||||||
|
|
||||||
|
public LauncherLogger()
|
||||||
{
|
{
|
||||||
base.Log(msg);
|
_loggers = new ILogger[] { _fileLogger, _consoleLogger, _bufferedLogger };
|
||||||
StringBuilder strb = new();
|
LogfileName = _fileLogger.LogfileName.Str;
|
||||||
strb.Append('[').Append(LastLogMessageTime).Append("]: ");
|
_bufferedLogger.MessageSent += s => MessageSent?.Invoke(s);
|
||||||
if (msg.Length == 1) strb.Append(msg[0]);
|
|
||||||
else for (int i = 1; i < msg.Length; i += 2)
|
|
||||||
strb.Append(msg[i]);
|
|
||||||
strb.Append('\n');
|
|
||||||
string msgConnected = strb.ToString();
|
|
||||||
MessageSent?.Invoke(msgConnected);
|
|
||||||
lock (_buffer) _buffer.Append(msgConnected);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<RootNamespace>Launcher.Server</RootNamespace>
|
<RootNamespace>Launcher.Server</RootNamespace>
|
||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<Nullable>disable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
@ -11,16 +11,16 @@
|
|||||||
<Platforms>AnyCPU</Platforms>
|
<Platforms>AnyCPU</Platforms>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib.Network\DTLib.Network.csproj" />
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib.Dtsod\DTLib.Dtsod.csproj" />
|
|
||||||
<ProjectReference Include="..\..\DTLib\DTLib\DTLib.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Update="launcher-server.dtsod">
|
<None Update="launcher-server.dtsod">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="DTLib.Dtsod" Version="1.3.0" />
|
||||||
|
<PackageReference Include="DTLib.Logging" Version="1.3.0" />
|
||||||
|
<PackageReference Include="DTLib.Network" Version="1.3.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -9,7 +9,6 @@ global using System.Net.Sockets;
|
|||||||
global using System.Text;
|
global using System.Text;
|
||||||
global using System.Threading;
|
global using System.Threading;
|
||||||
global using System.Linq;
|
global using System.Linq;
|
||||||
using System.Globalization;
|
|
||||||
using DTLib.Logging;
|
using DTLib.Logging;
|
||||||
|
|
||||||
namespace Launcher.Server;
|
namespace Launcher.Server;
|
||||||
@ -18,7 +17,9 @@ static class Server
|
|||||||
{
|
{
|
||||||
static readonly Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
static readonly Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||||
static DtsodV23 config;
|
static DtsodV23 config;
|
||||||
private static readonly ConsoleLogger Logger = new("logs", "launcher-server");
|
private static readonly CompositeLogger Logger = new(
|
||||||
|
new ConsoleLogger(),
|
||||||
|
new FileLogger("logs", "launcher-server"));
|
||||||
|
|
||||||
static readonly object manifestLocker = new();
|
static readonly object manifestLocker = new();
|
||||||
|
|
||||||
@ -29,40 +30,42 @@ static class Server
|
|||||||
Console.Title = "Launcher.Server";
|
Console.Title = "Launcher.Server";
|
||||||
Console.InputEncoding = Encoding.Unicode;
|
Console.InputEncoding = Encoding.Unicode;
|
||||||
Console.OutputEncoding = Encoding.Unicode;
|
Console.OutputEncoding = Encoding.Unicode;
|
||||||
PublicLog.LogEvent += Logger.Log;
|
DTLibInternalLogging.SetLogger(Logger);
|
||||||
config = new DtsodV23(File.ReadAllText("launcher-server.dtsod"));
|
config = new DtsodV23(File.ReadAllText("launcher-server.dtsod"));
|
||||||
Logger.Log("b", "local address: <", "c", config["local_ip"], "b",
|
Logger.LogInfo("Main", $"""
|
||||||
">\npublic address: <", "c", OldNetwork.GetPublicIP(), "b",
|
local address: {config["local_ip"]}
|
||||||
">\nport: <", "c", config["local_port"].ToString(), "b", ">");
|
public address: {OldNetwork.GetPublicIP()}
|
||||||
|
port: {config["local_port"]}
|
||||||
|
""");
|
||||||
mainSocket.Bind(new IPEndPoint(IPAddress.Parse(config["local_ip"]), config["local_port"]));
|
mainSocket.Bind(new IPEndPoint(IPAddress.Parse(config["local_ip"]), config["local_port"]));
|
||||||
mainSocket.Listen(1000);
|
mainSocket.Listen(1000);
|
||||||
CreateManifests();
|
CreateManifests();
|
||||||
Logger.Log("g", "server started succesfully");
|
Logger.LogInfo("Main", "server started succesfully");
|
||||||
// запуск отдельного потока для каждого юзера
|
// запуск отдельного потока для каждого юзера
|
||||||
Logger.Log("b", "waiting for users");
|
Logger.LogInfo("Main", "waiting for users");
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
var userSocket = mainSocket.Accept();
|
var userSocket = mainSocket.Accept();
|
||||||
var userThread = new Thread((obj) => UserHandle((Socket)obj));
|
var userThread = new Thread((obj) => HandleUser((Socket)obj));
|
||||||
userThread.Start(userSocket);
|
userThread.Start(userSocket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger.Log("r", ex.ToString());
|
Logger.LogError("Main", ex);
|
||||||
if (mainSocket.Connected)
|
if (mainSocket.Connected)
|
||||||
{
|
{
|
||||||
mainSocket.Shutdown(SocketShutdown.Both);
|
mainSocket.Shutdown(SocketShutdown.Both);
|
||||||
mainSocket.Close();
|
mainSocket.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Logger.Log("gray", "");
|
Console.ResetColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
// запускается для каждого юзера в отдельном потоке
|
// запускается для каждого юзера в отдельном потоке
|
||||||
static void UserHandle(Socket handlerSocket)
|
static void HandleUser(Socket handlerSocket)
|
||||||
{
|
{
|
||||||
Logger.Log("b", "user connecting... ");
|
Logger.LogInfo("HandleUser", "user connecting...");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// запрос хеша пароля и логина
|
// запрос хеша пароля и логина
|
||||||
@ -73,7 +76,7 @@ static class Server
|
|||||||
// запрос от апдейтера
|
// запрос от апдейтера
|
||||||
if (hash == hasher.HashCycled("updater".ToBytes(),64))
|
if (hash == hasher.HashCycled("updater".ToBytes(),64))
|
||||||
{
|
{
|
||||||
Logger.Log("b", "user is ", "c", "updater");
|
Logger.LogInfo("HandleUser", "user is updater");
|
||||||
handlerSocket.SendPackage("updater".ToBytes());
|
handlerSocket.SendPackage("updater".ToBytes());
|
||||||
// обработка запросов
|
// обработка запросов
|
||||||
while (true)
|
while (true)
|
||||||
@ -84,19 +87,19 @@ static class Server
|
|||||||
switch (request)
|
switch (request)
|
||||||
{
|
{
|
||||||
case "requesting launcher update":
|
case "requesting launcher update":
|
||||||
Logger.Log("b", "updater requested client.exe");
|
Logger.LogInfo("HandleUser", "updater requested client.exe");
|
||||||
fsp.UploadFile("share\\launcher.exe");
|
fsp.UploadFile("share\\launcher.exe");
|
||||||
break;
|
break;
|
||||||
case "register new user":
|
case "register new user":
|
||||||
Logger.Log("b", "new user registration requested");
|
Logger.LogInfo("HandleUser", "new user registration requested");
|
||||||
handlerSocket.SendPackage("ready".ToBytes());
|
handlerSocket.SendPackage("ready".ToBytes());
|
||||||
string req = StringConverter.MergeToString(
|
string req = StringConverter.MergeToString(
|
||||||
hasher.HashCycled(handlerSocket.GetPackage(), 64).HashToString(),
|
hasher.HashCycled(handlerSocket.GetPackage(), 64).HashToString(),
|
||||||
":\n{\n\tusername: \"", handlerSocket.GetPackage().ToString(),
|
":\n{\n\tusername: \"", handlerSocket.GetPackage().ToString(),
|
||||||
"\";\n\tuuid: \"null\";\n};");
|
"\";\n\tuuid: \"null\";\n};");
|
||||||
string filepath = $"registration_requests\\{DateTime.Now.ToString(CultureInfo.InvariantCulture).НормализоватьДляПути()}.req";
|
var filepath = Path.Concat("registration_requests", DateTime.Now.ToString(MyTimeFormat.ForFileNames), ".req");
|
||||||
File.WriteAllText(filepath, req);
|
File.WriteAllText(filepath, req);
|
||||||
Logger.Log("b", $"text wrote to file <", "c", $"registration_requests\\{filepath}", "b", ">");
|
Logger.LogInfo("HandleUser", $"text wrote to file <{filepath}>");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("unknown request: " + request);
|
throw new Exception("unknown request: " + request);
|
||||||
@ -108,7 +111,7 @@ static class Server
|
|||||||
// запрос от юзера
|
// запрос от юзера
|
||||||
else if (FindUser(hash, out var user))
|
else if (FindUser(hash, out var user))
|
||||||
{
|
{
|
||||||
Logger.Log("b", $"user is ", "c", user.name);
|
Logger.LogInfo("HandleUser", "user is " + user.name);
|
||||||
handlerSocket.SendPackage("launcher".ToBytes());
|
handlerSocket.SendPackage("launcher".ToBytes());
|
||||||
// обработка запросов
|
// обработка запросов
|
||||||
while (true)
|
while (true)
|
||||||
@ -119,27 +122,26 @@ static class Server
|
|||||||
switch (request)
|
switch (request)
|
||||||
{
|
{
|
||||||
case "requesting file download":
|
case "requesting file download":
|
||||||
var file = handlerSocket.GetPackage().ToString();
|
var requestedFile = Path.Concat("share",handlerSocket.GetPackage().ToString());
|
||||||
Logger.Log("b", $"user ", "c", user.name, "b", " requested file ", "c", file);
|
Logger.LogInfo("HandleUser", $"user {user.name} requested file {requestedFile}");
|
||||||
if (file == "manifest.dtsod")
|
if (requestedFile == "share/manifest.dtsod")
|
||||||
{
|
lock (manifestLocker)
|
||||||
lock (manifestLocker) fsp.UploadFile("share\\manifest.dtsod");
|
fsp.UploadFile(requestedFile.ToString());
|
||||||
}
|
else fsp.UploadFile(requestedFile.ToString());
|
||||||
else fsp.UploadFile($"share\\{file}");
|
|
||||||
break;
|
break;
|
||||||
case "requesting uuid":
|
case "requesting uuid":
|
||||||
Logger.Log("b", $"user ", "c", user.name, "b", " requested uuid");
|
Logger.LogInfo("HandleUser", "user " + user.name + " requested uuid");
|
||||||
handlerSocket.SendPackage(user.uuid.ToBytes());
|
handlerSocket.SendPackage(user.uuid.ToBytes());
|
||||||
break;
|
break;
|
||||||
case "excess files found":
|
case "excess files found":
|
||||||
Logger.Log("b", $"user ", "c", user.name, "b", " sent excess files list");
|
Logger.LogInfo("HandleUser", "user " + user.name + " sent excess files list");
|
||||||
fsp.DownloadFile($"excesses\\{user.name}-" +
|
fsp.DownloadFile(Path.Concat(
|
||||||
$"{DateTime.Now.ToString(CultureInfo.InvariantCulture).НормализоватьДляПути()}.txt");
|
"excesses",user.name, DateTime.Now.ToString(MyTimeFormat.ForFileNames),".txt")
|
||||||
|
.ToString());
|
||||||
break;
|
break;
|
||||||
case "sending launcher error":
|
case "sending launcher error":
|
||||||
Logger.Log("y", "user ", "c", user.name, "y", "is sending error:");
|
|
||||||
string error = handlerSocket.GetPackage().ToString();
|
string error = handlerSocket.GetPackage().ToString();
|
||||||
Logger.Log("y", error + '\n');
|
Logger.LogWarn("HandleUser", "user "+ user.name + "is sending error:\n"+error);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("unknown request: " + request);
|
throw new Exception("unknown request: " + request);
|
||||||
@ -151,13 +153,13 @@ static class Server
|
|||||||
// неизвестный юзер
|
// неизвестный юзер
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Logger.Log("y", $"user with hash <{hash.HashToString()}> not found");
|
Logger.LogWarn("HandleUser", $"user with hash {hash.HashToString()} not found");
|
||||||
handlerSocket.SendPackage("user not found".ToBytes());
|
handlerSocket.SendPackage("user not found".ToBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger.Log("y", $"UserStart() error:\n message:\n {ex}");
|
Logger.LogWarn("HandleUser", ex);
|
||||||
if (mainSocket.Connected)
|
if (mainSocket.Connected)
|
||||||
{
|
{
|
||||||
mainSocket.Shutdown(SocketShutdown.Both);
|
mainSocket.Shutdown(SocketShutdown.Both);
|
||||||
@ -166,9 +168,10 @@ static class Server
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (handlerSocket.Connected) handlerSocket.Shutdown(SocketShutdown.Both);
|
if (handlerSocket.Connected)
|
||||||
|
handlerSocket.Shutdown(SocketShutdown.Both);
|
||||||
handlerSocket.Close();
|
handlerSocket.Close();
|
||||||
Logger.Log("g", "user disconnected");
|
Logger.LogInfo("HandleUser", "user disconnected");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,19 +179,19 @@ static class Server
|
|||||||
{
|
{
|
||||||
lock (manifestLocker)
|
lock (manifestLocker)
|
||||||
{
|
{
|
||||||
Directory.Create($"share\\download_if_not_exist");
|
Directory.Create("share\\download_if_not_exist");
|
||||||
Directory.Create($"share\\sync_always");
|
Directory.Create("share\\sync_always");
|
||||||
Directory.Create($"share\\sync_and_remove");
|
Directory.Create("share\\sync_and_remove");
|
||||||
|
|
||||||
FSP.CreateManifest($"share\\download_if_not_exist");
|
FSP.CreateManifest("share\\download_if_not_exist");
|
||||||
FSP.CreateManifest($"share\\sync_always");
|
FSP.CreateManifest("share\\sync_always");
|
||||||
foreach (string dir in Directory.GetDirectories("share\\sync_and_remove"))
|
foreach (string dir in Directory.GetDirectories("share\\sync_and_remove"))
|
||||||
FSP.CreateManifest(dir);
|
FSP.CreateManifest(dir);
|
||||||
File.WriteAllText($"share\\sync_and_remove\\dirlist.dtsod",
|
File.WriteAllText("share\\sync_and_remove\\dirlist.dtsod",
|
||||||
$"dirs: [\""+
|
"dirs: [\""+
|
||||||
Directory.GetDirectories("share\\sync_and_remove")
|
Directory.GetDirectories("share\\sync_and_remove")
|
||||||
.MergeToString("\",\"")
|
.MergeToString("\",\"")
|
||||||
.Replace($"share\\sync_and_remove\\", "")+
|
.Replace("share\\sync_and_remove\\", "")+
|
||||||
"\"];");
|
"\"];");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,12 +17,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcher.Client.Avalonia",
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcher.Client", "Launcher.Client\Launcher.Client.csproj", "{87427137-840D-4D09-A101-9481110682BD}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcher.Client", "Launcher.Client\Launcher.Client.csproj", "{87427137-840D-4D09-A101-9481110682BD}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib", "..\DTLib\DTLib\DTLib.csproj", "{E27F82A6-B58F-4C07-8DAB-F1556F24F5E0}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib.Dtsod", "..\DTLib\DTLib.Dtsod\DTLib.Dtsod.csproj", "{507C97A8-47ED-4271-952F-49883E508EA7}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib.Network", "..\DTLib\DTLib.Network\DTLib.Network.csproj", "{5F53F49F-FFEA-4C2E-B21D-8E11363EA969}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -45,18 +39,6 @@ Global
|
|||||||
{87427137-840D-4D09-A101-9481110682BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{87427137-840D-4D09-A101-9481110682BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{87427137-840D-4D09-A101-9481110682BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{87427137-840D-4D09-A101-9481110682BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{87427137-840D-4D09-A101-9481110682BD}.Release|Any CPU.Build.0 = Release|Any CPU
|
{87427137-840D-4D09-A101-9481110682BD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{E27F82A6-B58F-4C07-8DAB-F1556F24F5E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{E27F82A6-B58F-4C07-8DAB-F1556F24F5E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{E27F82A6-B58F-4C07-8DAB-F1556F24F5E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{E27F82A6-B58F-4C07-8DAB-F1556F24F5E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{507C97A8-47ED-4271-952F-49883E508EA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{507C97A8-47ED-4271-952F-49883E508EA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{507C97A8-47ED-4271-952F-49883E508EA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{507C97A8-47ED-4271-952F-49883E508EA7}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{5F53F49F-FFEA-4C2E-B21D-8E11363EA969}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{5F53F49F-FFEA-4C2E-B21D-8E11363EA969}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{5F53F49F-FFEA-4C2E-B21D-8E11363EA969}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{5F53F49F-FFEA-4C2E-B21D-8E11363EA969}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user