diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 1ff0c42..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1,63 +0,0 @@
-###############################################################################
-# Set default behavior to automatically normalize line endings.
-###############################################################################
-* text=auto
-
-###############################################################################
-# Set default behavior for command prompt diff.
-#
-# This is need for earlier builds of msysgit that does not have it on by
-# default for csharp files.
-# Note: This is only used by command line
-###############################################################################
-#*.cs diff=csharp
-
-###############################################################################
-# Set the merge driver for project and solution files
-#
-# Merging from the command prompt will add diff markers to the files if there
-# are conflicts (Merging from VS is not affected by the settings below, in VS
-# the diff markers are never inserted). Diff markers may cause the following
-# file extensions to fail to load in VS. An alternative would be to treat
-# these files as binary and thus will always conflict and require user
-# intervention with every merge. To do so, just uncomment the entries below
-###############################################################################
-#*.sln merge=binary
-#*.csproj merge=binary
-#*.vbproj merge=binary
-#*.vcxproj merge=binary
-#*.vcproj merge=binary
-#*.dbproj merge=binary
-#*.fsproj merge=binary
-#*.lsproj merge=binary
-#*.wixproj merge=binary
-#*.modelproj merge=binary
-#*.sqlproj merge=binary
-#*.wwaproj merge=binary
-
-###############################################################################
-# behavior for image files
-#
-# image files are treated as binary by default.
-###############################################################################
-#*.jpg binary
-#*.png binary
-#*.gif binary
-
-###############################################################################
-# diff behavior for common document formats
-#
-# Convert binary document formats to text before diffing them. This feature
-# is only available from the command line. Turn it on by uncommenting the
-# entries below.
-###############################################################################
-#*.doc diff=astextplain
-#*.DOC diff=astextplain
-#*.docx diff=astextplain
-#*.DOCX diff=astextplain
-#*.dot diff=astextplain
-#*.DOT diff=astextplain
-#*.pdf diff=astextplain
-#*.PDF diff=astextplain
-#*.rtf diff=astextplain
-#*.RTF diff=astextplain
diff --git a/.gitignore b/.gitignore
index 8ef2770..c65ebad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,365 +1,365 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
-
-# User-specific files
-*.rsuser
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Mono auto generated files
-mono_crash.*
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-[Ww][Ii][Nn]32/
-[Aa][Rr][Mm]/
-[Aa][Rr][Mm]64/
-bld/
-[Bb]in/
-[Oo]bj/
-[Oo]ut/
-[Ll]og/
-[Ll]ogs/
-
-# Visual Studio 2015/2017 cache/options directory
-.vs/
-.vshistory/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# Visual Studio 2017 auto generated files
-Generated\ Files/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUnit
-*.VisualState.xml
-TestResult.xml
-nunit-*.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET Core
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-# ASP.NET Scaffolding
-ScaffoldingReadMe.txt
-
-# StyleCop
-StyleCopReport.xml
-
-# Files built by Visual Studio
-*_i.c
-*_p.c
-*_h.h
-*.ilk
-*.meta
-*.obj
-*.iobj
-*.pch
-*.pdb
-*.ipdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*_wpftmp.csproj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-*.editorconfig
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# Visual Studio Trace Files
-*.e2e
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Coverlet is a free, cross platform Code Coverage Tool
-coverage*.json
-coverage*.xml
-coverage*.info
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# NuGet Symbol Packages
-*.snupkg
-# The packages folder can be ignored because of Package Restore
-**/[Pp]ackages/*
-# except build/, which is used as an MSBuild target.
-!**/[Pp]ackages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/[Pp]ackages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-*.appxbundle
-*.appxupload
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!?*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Including strong name files can present a security risk
-# (https://github.com/github/gitignore/pull/2483#issue-259490424)
-#*.snk
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-ServiceFabricBackup/
-*.rptproj.bak
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-*.rptproj.rsuser
-*- [Bb]ackup.rdl
-*- [Bb]ackup ([0-9]).rdl
-*- [Bb]ackup ([0-9][0-9]).rdl
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# CodeRush personal settings
-.cr/personal
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# OpenCover UI analysis results
-OpenCover/
-
-# Azure Stream Analytics local run output
-ASALocalRun/
-
-# MSBuild Binary and Structured Log
-*.binlog
-
-# NVidia Nsight GPU debugger configuration file
-*.nvuser
-
-# MFractors (Xamarin productivity tool) working folder
-.mfractor/
-
-# Local History for Visual Studio
-.localhistory/
-
-# BeatPulse healthcheck temp database
-healthchecksdb
-
-# Backup folder for Package Reference Convert tool in Visual Studio 2017
-MigrationBackup/
-
-# Ionide (cross platform F# VS Code tools) working folder
-.ionide/
-
-# Fody - auto-generated XML schema
-FodyWeavers.xsd
\ No newline at end of file
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Oo]ut/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+.vshistory/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+*.editorconfig
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
diff --git a/dtlauncher-client-win/LauncherWindow.xaml.cs b/dtlauncher-client-win/LauncherWindow.xaml.cs
index 1592254..0001c31 100644
--- a/dtlauncher-client-win/LauncherWindow.xaml.cs
+++ b/dtlauncher-client-win/LauncherWindow.xaml.cs
@@ -87,7 +87,7 @@ namespace dtlauncher_client_win
public void Log(string msg)
{
if (LogBox.Text[LogBox.Text.Length - 1] == '\n') msg = "[" + DateTime.Now.ToString() + "]: " + msg;
- OldFilework.LogToFile(logfile, msg);
+ File.AppendAllText(logfile, msg);
LogBox.Text += msg;
}
diff --git a/dtlauncher-client-win/LoginWindow.xaml.cs b/dtlauncher-client-win/LoginWindow.xaml.cs
index e34210d..0e8f4a3 100644
--- a/dtlauncher-client-win/LoginWindow.xaml.cs
+++ b/dtlauncher-client-win/LoginWindow.xaml.cs
@@ -7,6 +7,7 @@ using DTLib;
using DTLib.Dtsod;
using DTLib.Filesystem;
using DTLib.Network;
+using DTLib.Extensions;
namespace dtlauncher_client_win
{
@@ -126,7 +127,7 @@ namespace dtlauncher_client_win
public void Log(string msg)
{
if (LogBox.Text[LogBox.Text.Length - 1] == '\n') msg = "[" + DateTime.Now.ToString() + "]: " + msg;
- OldFilework.LogToFile(logfile, msg);
+ File.AppendAllText(logfile, msg);
LogBox.Text += msg;
}
diff --git a/dtlauncher-client-win/dtlauncher-client-win.csproj b/dtlauncher-client-win/dtlauncher-client-win.csproj
index 580ef24..65db21c 100644
--- a/dtlauncher-client-win/dtlauncher-client-win.csproj
+++ b/dtlauncher-client-win/dtlauncher-client-win.csproj
@@ -98,6 +98,9 @@
ResXFileCodeGenerator
Resources.Designer.cs
+
+ Always
+
SettingsSingleFileGenerator
Settings.Designer.cs
@@ -107,7 +110,7 @@
-
+
{ce793497-2d5c-42d8-b311-e9b32af9cdfb}
DTLib
@@ -122,8 +125,7 @@
del /f /q dtlauncher-client-win.exe.config
-copy dtlauncher-client-win.exe C:\projects\c#\dtlauncher\dtlauncher-server-win\bin\share\client\dtlauncher-client-win.exe
-copy C:\projects\c#\dtlauncher\dtlauncher-client-win\client.dtsod client.dtsod
-copy client.dtsod C:\projects\c#\dtlauncher\dtlauncher-server-win\bin\share\client\client.dtsod
+copy dtlauncher-client-win.exe ..\..\dtlauncher-server-win\bin\share\client\dtlauncher-client-win.exe
+copy client.dtsod ..\..\dtlauncher-server-win\bin\share\client\client.dtsod
\ No newline at end of file
diff --git a/dtlauncher-server-win/DtlauncherServer.cs b/dtlauncher-server-win/DtlauncherServer.cs
index 9940857..03f79e3 100644
--- a/dtlauncher-server-win/DtlauncherServer.cs
+++ b/dtlauncher-server-win/DtlauncherServer.cs
@@ -8,6 +8,7 @@ using DTLib;
using DTLib.Dtsod;
using DTLib.Filesystem;
using DTLib.Network;
+using DTLib.Extensions;
namespace dtlauncher_server
{
@@ -16,6 +17,7 @@ namespace dtlauncher_server
static readonly string logfile = $"logs\\dtlauncher-server-{DateTime.Now}.log".Replace(':', '-').Replace(' ', '_');
static readonly Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
static DtsodV21 config;
+ static DTLib.Loggers.DefaultLogger Info = new("logs", "dtlaunchet_server");
//static readonly Dictionary users = new();
@@ -26,8 +28,8 @@ namespace dtlauncher_server
Console.Title = "dtlauncher server";
Console.InputEncoding = Encoding.Unicode;
Console.OutputEncoding = Encoding.Unicode;
- PublicLog.LogEvent += Log;
- PublicLog.LogNoTimeEvent += Log;
+ PublicLog.LogEvent += Info.Log;
+ PublicLog.LogNoTimeEvent += Info.Log;
/*var outBuilder = new StringBuilder();
string time = DateTime.Now.ToString().Replace(':', '-').Replace(' ', '_');
foreach (var _file in Directory.GetFiles(@"D:\!dtlauncher-server\share\public\Conan_Exiles"))
@@ -47,15 +49,15 @@ namespace dtlauncher_server
outBuilder.Append(file);
outBuilder.Append("\");\n");
}
- Log("c", "\n\n" + outBuilder.ToString() + "\n\n");*/
+ Info.Log("c", "\n\n" + outBuilder.ToString() + "\n\n");*/
config = config = new(File.ReadAllText("server.dtsod"));
int f = (int)config["server_port"];
- Log("b", "local address: <", "c", config["server_ip"], "b",
+ Info.Log("b", "local address: <", "c", config["server_ip"], "b",
">\npublic address: <", "c", OldNetwork.GetPublicIP(), "b",
">\nport: <", "c", config["server_port"].ToString(), "b", ">\n");
mainSocket.Bind(new IPEndPoint(IPAddress.Parse(config["server_ip"]), (int)config["server_port"]));
mainSocket.Listen(1000);
- Log("g", "server started succesfully\n");
+ Info.Log("g", "server started succesfully\n");
//
/*DTLib.Timer userCkeckTimer = new(true, 3000, () =>
{
@@ -63,7 +65,7 @@ namespace dtlauncher_server
{
if (usr.)
{
- Log("y", $"closing unused user <{usr.RemoteEndPoint.Serialize()[0]}> thread\n");
+ Info.Log("y", $"closing unused user <{usr.RemoteEndPoint.Serialize()[0]}> thread\n");
users[usr].Abort();
users.Remove(usr);
}
@@ -80,36 +82,18 @@ namespace dtlauncher_server
}
catch (Exception ex)
{
- Log("r", $"dtlauncher_server.Main() error:\n{ex.Message}\n{ex.StackTrace}\n");
+ Info.Log("r", $"dtlauncher_server.Main() error:\n{ex.Message}\n{ex.StackTrace}\n");
mainSocket.Close();
}
- Log("press any key to close... ");
+ Info.Log("press any key to close... ");
Console.ReadKey();
- Log("gray", "\n");
- }
-
- // вывод лога в консоль и файл
- public static void Log(params string[] msg)
- {
- if (msg.Length == 1) msg[0] = "[" + DateTime.Now.ToString() + "]: " + msg[0];
- else msg[1] = "[" + DateTime.Now.ToString() + "]: " + msg[1];
- LogNoTime(msg);
- }
- public static void LogNoTime(params string[] msg)
- {
- lock (new object())
- {
- if (msg.Length == 1) OldFilework.LogToFile(logfile, msg[0]);
- else if (msg.Length % 2 != 0) throw new Exception("incorrect array to log\n");
- else OldFilework.LogToFile(logfile, msg.MergeToString());
- ColoredConsole.Write(msg);
- }
+ Info.Log("gray", "\n");
}
// запускается для каждого юзера в отдельном потоке
static void UserHandle(Socket handlerSocket)
{
- Log("b", "user connecting... ");
+ Info.Log("b", "user connecting... ");
//Socket fspSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//fspSocket.Bind()
FSP fsp = new(handlerSocket);
@@ -120,9 +104,9 @@ namespace dtlauncher_server
// запрос от апдейтера
if (hash.HashToString() == "ffffffffffffffff")
{
- LogNoTime("c", "client is updater\n");
+ Info.LogNoTime("c", "client is updater\n");
CreateManifest("share\\client\\");
- Log("g", "client files manifest created\n");
+ Info.Log("g", "client files manifest created\n");
handlerSocket.SendPackage("updater".ToBytes());
while (true)
{
@@ -137,16 +121,16 @@ namespace dtlauncher_server
fsp.UploadFile(filepath);
break;
case "register new user":
- Log("b", "new user registration requested\n");
+ Info.Log("b", "new user registration requested\n");
handlerSocket.SendPackage("ok".ToBytes());
//filepath = handlerSocket.GetPackage().BytesToString();
//if (!filePath.EndsWith(".req")) throw new Exception($"wrong registration request file: <{filepath}>");
- //Log("b", $"downloading file registration_requests\\{filepath}\n");
+ //Info.Log("b", $"downloading file registration_requests\\{filepath}\n");
//handlerSocket.FSP_Download($"registration_requests\\{filepath}");
recieved = handlerSocket.GetPackage().BytesToString();
filepath = $"registration_requests\\{recieved.Remove(0, recieved.IndexOf(':') + 2)}.req";
File.WriteAllText(filepath, recieved);
- Log("b", $"text wrote to file <", "c", "registration_requests\\{filepath}", "b", ">\n");
+ Info.Log("b", $"text wrote to file <", "c", "registration_requests\\{filepath}", "b", ">\n");
break;
default:
throw new Exception("unknown request: " + request);
@@ -158,14 +142,14 @@ namespace dtlauncher_server
// запрос от лаунчера
else
{
- LogNoTime("c", "client is launcher\n");
+ Info.LogNoTime("c", "client is launcher\n");
string login;
lock (new object())
{
login = OldFilework.ReadFromConfig("users.db", hash.HashToString());
}
handlerSocket.SendPackage("success".ToBytes());
- Log("g", "user <", "c", login, "g", "> succesfully logined\n");
+ Info.Log("g", "user <", "c", login, "g", "> succesfully logined\n");
while (true)
{
if (handlerSocket.Available >= 64)
@@ -194,7 +178,7 @@ namespace dtlauncher_server
}
catch (Exception ex)
{
- Log("y", $"UserStart() error:\n message:\n {ex.Message}\n{ex.StackTrace}\n");
+ Info.Log("y", $"UserStart() error:\n message:\n {ex.Message}\n{ex.StackTrace}\n");
handlerSocket.Shutdown(SocketShutdown.Both);
handlerSocket.Close();
Thread.CurrentThread.Abort();
diff --git a/dtlauncher-server-win/dtlauncher-server-win.csproj b/dtlauncher-server-win/dtlauncher-server-win.csproj
index d857fad..4f0e977 100644
--- a/dtlauncher-server-win/dtlauncher-server-win.csproj
+++ b/dtlauncher-server-win/dtlauncher-server-win.csproj
@@ -83,7 +83,9 @@
SettingsSingleFileGenerator
Settings.Designer.cs
-
+
+ Always
+
@@ -101,14 +103,13 @@
-
+
{ce793497-2d5c-42d8-b311-e9b32af9cdfb}
DTLib
- del /f /q dtlauncher-server-win.exe.config
-copy C:\projects\c#\dtlauncher\dtlauncher-server-win\server.dtsod server.dtsod
+ del /f /q dtlauncher-server-win.exe.config
\ No newline at end of file
diff --git a/dtlauncher.sln b/dtlauncher.sln
index 8ea0978..da664fa 100644
--- a/dtlauncher.sln
+++ b/dtlauncher.sln
@@ -17,7 +17,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "updater", "updater\updater.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dtscript", "dtscript\dtscript.csproj", "{E02EA967-FD29-47D2-B25B-BA684B784AEE}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib", "..\DTLib\DTLib.csproj", "{CE793497-2D5C-42D8-B311-E9B32AF9CDFB}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DTLib", "..\DTLib\DTLib\DTLib.csproj", "{CE793497-2D5C-42D8-B311-E9B32AF9CDFB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sulution Files", "Sulution Files", "{09AA971D-CD70-4D93-BBA9-810C842830D8}"
+ ProjectSection(SolutionItems) = preProject
+ .gitignore = .gitignore
+ EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -32,8 +37,8 @@ Global
{4784D974-A342-4202-9430-90FE5AC00FC7}.Build|Any CPU.Build.0 = Build|Any CPU
{E02EA967-FD29-47D2-B25B-BA684B784AEE}.Build|Any CPU.ActiveCfg = Build|Any CPU
{E02EA967-FD29-47D2-B25B-BA684B784AEE}.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
+ {CE793497-2D5C-42D8-B311-E9B32AF9CDFB}.Build|Any CPU.ActiveCfg = Release-net48|Any CPU
+ {CE793497-2D5C-42D8-B311-E9B32AF9CDFB}.Build|Any CPU.Build.0 = Release-net48|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/dtscript/MainClass.cs b/dtscript/MainClass.cs
index f1c5454..609f0e7 100644
--- a/dtscript/MainClass.cs
+++ b/dtscript/MainClass.cs
@@ -2,54 +2,32 @@
using DTLib;
using DTLib.Filesystem;
-namespace DTScript
+namespace DTScript;
+
+public class MainClass
{
- public class MainClass
+ static DTLib.Loggers.DefaultLogger Info = new("logs", "dtlaunchet_server");
+
+ static void Main(string[] args)
{
- static void Main(string[] args)
+ try
{
- try
+ Directory.Create("dtscript-logs");
+ PublicLog.LogEvent += Info.Log;
+ PublicLog.LogNoTimeEvent += Info.Log;
+ var scripter = new ScriptRunner();
+ if (args.Length == 0 || args.Length > 2) throw new Exception("enter script file path\n");
+ else if (args.Length == 1) scripter.RunScriptFile(args[0]);
+ else if (args.Length == 2 && args[0] == "-debug")
{
- Directory.Create("dtscript-logs");
- PublicLog.LogEvent += Log;
- PublicLog.LogNoTimeEvent += Log;
- var scripter = new ScriptRunner();
- if (args.Length == 0 || args.Length > 2) throw new Exception("enter script file path\n");
- else if (args.Length == 1) scripter.RunScriptFile(args[0]);
- else if (args.Length == 2 && args[0] == "-debug")
- {
- scripter.debug = true;
- scripter.Debug("y", "debug is enabled\n");
- scripter.RunScriptFile(args[1]);
- }
- else throw new Exception("unknown args\n");
+ scripter.debug = true;
+ scripter.Debug("y", "debug is enabled\n");
+ scripter.RunScriptFile(args[1]);
}
- catch (Exception ex)
- {
- Log("r", $"dtscript.Main() error:\n{ex.Message}\n{ex.StackTrace}\n");
- }
- Log("gray", " \n");
- }
-
- // вывод лога в консоль и файл
- static readonly string logfile = $"dtscript-logs\\dtscript-{DateTime.Now}.log".Replace(':', '-').Replace(' ', '_');
-
- static void Log(params string[] msg)
- {
- if (msg.Length == 1)
- {
- msg[0] = "[" + DateTime.Now.ToString() + "]: " + msg[0];
- OldFilework.LogToFile(logfile, msg[0]);
- }
- else if (msg.Length % 2 != 0) throw new Exception("incorrect array to log\n");
- else
- {
- msg[1] = "[" + DateTime.Now.ToString() + "]: " + msg[1];
- var str = new System.Text.StringBuilder();
- for (int i = 0; i < msg.Length; i++) str.Append(msg[++i]);
- OldFilework.LogToFile(logfile, str.ToString());
- }
- ColoredConsole.Write(msg);
+ else throw new Exception("unknown args\n");
}
+ catch (Exception ex)
+ { Info.Log("r", $"dtscript.Main() error:\n{ex.Message}\n{ex.StackTrace}\n"); }
+ Info.Log("gray", " \n");
}
}
diff --git a/dtscript/ScriptRunner.cs b/dtscript/ScriptRunner.cs
index a38fd1f..8b4dacf 100644
--- a/dtscript/ScriptRunner.cs
+++ b/dtscript/ScriptRunner.cs
@@ -2,465 +2,464 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.Sockets;
+using System.Linq;
using DTLib;
using DTLib.Filesystem;
using DTLib.Network;
-namespace DTScript
+namespace DTScript;
+
+//
+// основной класс скриптового интерпретатора
+//
+public class ScriptRunner
{
- //
- // основной класс скриптового интерпретатора
- //
- public class ScriptRunner
+ // выводит текст через DTLib если дебаг включен
+ public bool debug = false;
+ public Socket mainSocket;
+ public FSP fsp;
+
+ internal void Debug(params string[] msg)
{
- // выводит текст через DTLib если дебаг включен
- public bool debug = false;
- public Socket mainSocket;
- public FSP fsp;
+ if (debug) PublicLog.Log(msg);
+ }
- internal void Debug(params string[] msg)
- {
- if (debug) PublicLog.Log(msg);
- }
+ // cчитывание текста из файла и запуск выполнения
+ public void RunScriptFile(string scriptfile)
+ {
+ Debug("g", @"----\ " + scriptfile + " /----\n");
+ try { Execute(SplitScript(File.ReadAllText(scriptfile))); }
+ catch (Exception e) { PublicLog.Log("r", $"dtscript RunScriptFile() error:\n{e.Message}\n{e.StackTrace}\n", "gray", " \n"); }
+ }
- // cчитывание текста из файла и запуск выполнения
- public void RunScriptFile(string scriptfile)
- {
- Debug("g", @"----\ " + scriptfile + " /----\n");
- try { Execute(SplitScript(File.ReadAllText(scriptfile))); }
- catch (Exception e) { PublicLog.Log("r", $"dtscript RunScriptFile() error:\n{e.Message}\n{e.StackTrace}\n", "gray", " \n"); }
- }
+ int globalindex = -1;
+ List> Storage = new();
- int globalindex = -1;
- List> Storage = new();
+ object GetValue(string key)
+ {
+ Debug("m", "GetValue(", "c", "<", "b", key, "c", ">", "m", ")\n");
+ for (int i = 0; i <= globalindex; i++)
+ if (Storage[i].ContainsKey(key)) return Storage[i][key];
+ throw new Exception($"GetValue() exception: storage doesn't contain key<{key}>");
+ }
- object GetValue(string key)
- {
- Debug("m", "GetValue(", "c", "<", "b", key, "c", ">", "m", ")\n");
- for (int i = 0; i <= globalindex; i++)
- if (Storage[i].ContainsKey(key)) return Storage[i][key];
- throw new Exception($"GetValue() exception: storage doesn't contain key<{key}>");
- }
-
- void SetValue(string key, object value)
- {
- Debug("m", "SetValue(", "c", "<", "b", key, "c", "> ", "c", "<", "b", value.ToString(), "c", ">", "m", ")\n");
- for (int i = 0; i <= globalindex; i++)
- if (Storage[i].ContainsKey(key))
- {
- Storage[i][key] = value;
- Debug(Storage[i][key].ToString());
- return;
- }//throw new Exception($"SetValue() exception: storage alredy contains key<{key}>");
- Storage[globalindex].Add(key, value);
- }
-
- dynamic Execute(List script)
- {
- Debug("y", " executing...\n");
- // создание локального
- globalindex++;
- List subscript;
- Storage.Add(new Dictionary());
- // запуск цикла
- for (int index = 0; index < script.Count; index++)
+ void SetValue(string key, object value)
+ {
+ Debug("m", "SetValue(", "c", "<", "b", key, "c", "> ", "c", "<", "b", value.ToString(), "c", ">", "m", ")\n");
+ for (int i = 0; i <= globalindex; i++)
+ if (Storage[i].ContainsKey(key))
{
- if (debug)
- {
- PublicLog.Log(new string[] {
+ Storage[i][key] = value;
+ Debug(Storage[i][key].ToString());
+ return;
+ }//throw new Exception($"SetValue() exception: storage alredy contains key<{key}>");
+ Storage[globalindex].Add(key, value);
+ }
+
+ dynamic Execute(List script)
+ {
+ Debug("y", " executing...\n");
+ // создание локального
+ globalindex++;
+ List subscript;
+ Storage.Add(new Dictionary());
+ // запуск цикла
+ for (int index = 0; index < script.Count; index++)
+ {
+ if (debug)
+ {
+ PublicLog.Log(new string[] {
"y","\noperator: ", "m",script[index].Operator, "y"," options: ", "c", "<", "b", script[index].Options[0], "c", ">"});
- for (ushort n = 1; n < script[index].Options.Length; n++)
- PublicLog.Log("w", ", ", "c", "<", "b", script[index].Options[n], "c", ">");
- PublicLog.Log("\n");
- }
- switch (script[index].Operator)
+ for (ushort n = 1; n < script[index].Options.Length; n++)
+ PublicLog.Log("w", ", ", "c", "<", "b", script[index].Options[n], "c", ">");
+ PublicLog.Log("\n");
+ }
+ switch (script[index].Operator)
+ {
+ case "return":
+ Debug("g", "script ended");
+ return GetValue(script[index].Options[0]);
+ case "Run":
+ var proc = new Process();
+ proc.StartInfo.FileName = script[index].Options[0].Replace("\"", "");
+ proc.StartInfo.Arguments = script[index].Options[1].Replace("\"", "");
+ /*if (script[index].Options.Length == 3 && script[index].Options[2] == "true")
+ {
+ proc.StartInfo.CreateNoWindow = true;
+ Debug("g", $"process {script[index].Operator} started in hidden mode\n");
+ }
+ else if (script[index].Options.Length == 3 && script[index].Options[2] == "false")
+ {
+ proc.StartInfo.CreateNoWindow = false;
+ Debug("g", $"process {script[index].Operator} started in not hidden mode\n");
+ }
+ else throw new Exception("invalid arguments in Run().\n it must be: Run(string exe_file, string arguments, true/false nowindow)\n");
+ proc.StartInfo.UseShellExecute = false;*/
+ proc.Start();
+ proc.WaitForExit();
+ proc.Close();
+ break;
+ case "Log":
+ Debug("y", $"Log() has {script[index].Options.Length} args\n");
+ PublicLog.Log(CalcString(script[index].Options.ToList()));
+ break;
+ case "ShowFiles":
+ Debug("y", $"Log() has {script[index].Options.Length} args\n");
+ foreach (string file in Directory.GetFiles(CalcString(script[index].Options.ToList())))
+ PublicLog.Log(file + '\n');
+ break;
+ case "bool":
+ if (script[index].Options.Length > 2 && script[index].Options[1] == "=")
+ {
+ List expr = new();
+ for (ushort n = 2; n < script[index].Options.Length; n++)
+ expr.Add(script[index].Options[n]);
+ // сравнение и добавление результата в storage[globalindex]
+ SetValue(script[index].Options[0], Compare(expr));
+ Debug(new string[] {"y"," bool ","b", script[index].Options[0],
+ "w", " = ", "c", GetValue(script[index].Options[0]).ToString() + '\n'});
+ }
+ else throw new Exception("error: incorrect bool defination\n");
+ break;
+ case "num":
+ if (script[index].Options.Length > 2 && script[index].Options[1] == "=")
+ {
+ List expr = new();
+ for (ushort n = 2; n < script[index].Options.Length; n++)
+ {
+ expr.Add(script[index].Options[n]);
+ }
+ SetValue(script[index].Options[0], (double)Calc(expr));
+ Debug(new string[] {"y"," num ","b", script[index].Options[0],
+ "w", " = ", "c", GetValue(script[index].Options[0]).ToString() + '\n'});
+ }
+ else throw new Exception("Execute() error: incorrect double defination\n");
+ break;
+ case "string":
+ if (script[index].Options.Length > 2 && script[index].Options[1] == "=")
+ {
+ List expr = new();
+ for (ushort n = 2; n < script[index].Options.Length; n++)
+ {
+ expr.Add(script[index].Options[n]);
+ }
+ SetValue(script[index].Options[0], CalcString(expr));
+ Debug(new string[] {"y"," string ","b", script[index].Options[0],
+ "w", " = ", "c", GetValue(script[index].Options[0]).ToString() + '\n'});
+ }
+ break;
+ case "while":
+ if (script[index + 1].Operator != "{") throw new Exception("Execute() error: expect { after for()");
+ subscript = SplitScript(script[index + 1].Options[0]);
+ while (Compare(script[index].Options.ToList()))
+ {
+ Execute(subscript);
+ }
+ index++;
+ break;
+ case "if":
+ if (script[index + 1].Operator != "{") throw new Exception("Execute() error: expect { after for()");
+ subscript = SplitScript(script[index + 1].Options[0]);
+ if (Compare(script[index].Options.ToList()))
+ {
+ Execute(subscript);
+ }
+ index++;
+ break;
+ case "Download":
+ if (fsp is null) fsp = new(mainSocket);
+ fsp.DownloadFile(script[index].Options[0], script[index].Options[1]);
+ break;
+ case "DirDelete":
+ Directory.Delete(script[index].Options[0]);
+ break;
+ case "FileDelete":
+ File.Delete(script[index].Options[0]);
+ break;
+ case "FileWrite":
+ File.Create(script[index].Options[0]);
+ File.WriteAllText(script[index].Options[0], script[index].Options[1]);
+ break;
+ case "FileAppend":
+ File.Create(script[index].Options[0]);
+ File.AppendAllText(script[index].Options[0], script[index].Options[1]);
+ break;
+ default:
+ throw new Exception($"Execute() error: invalid construct: {script[index].Operator}\n");
+ }
+ }
+ Storage.RemoveAt(globalindex);
+ globalindex--;
+ return null;
+
+ // операции со строками
+ string CalcString(List expr)
+ {
+ Debug("m", "CalcString(");
+ foreach (string part in expr)
+ Debug("c", "<", "b", part, "c", ">");
+ Debug("m", ")", "y", " started\n");
+ // извлечение значений переменных
+ for (ushort n = 0; n < expr.Count; n++)
+ {
+ switch (expr[n][0])
{
- case "return":
- Debug("g", "script ended");
- return GetValue(script[index].Options[0]);
- case "Run":
- var proc = new Process();
- proc.StartInfo.FileName = script[index].Options[0].Replace("\"", "");
- proc.StartInfo.Arguments = script[index].Options[1].Replace("\"", "");
- /*if (script[index].Options.Length == 3 && script[index].Options[2] == "true")
- {
- proc.StartInfo.CreateNoWindow = true;
- Debug("g", $"process {script[index].Operator} started in hidden mode\n");
- }
- else if (script[index].Options.Length == 3 && script[index].Options[2] == "false")
- {
- proc.StartInfo.CreateNoWindow = false;
- Debug("g", $"process {script[index].Operator} started in not hidden mode\n");
- }
- else throw new Exception("invalid arguments in Run().\n it must be: Run(string exe_file, string arguments, true/false nowindow)\n");
- proc.StartInfo.UseShellExecute = false;*/
- proc.Start();
- proc.WaitForExit();
- proc.Close();
+ case '+':
break;
- case "Log":
- Debug("y", $"Log() has {script[index].Options.Length} args\n");
- PublicLog.Log(CalcString(script[index].Options.ToList()));
- break;
- case "ShowFiles":
- Debug("y", $"Log() has {script[index].Options.Length} args\n");
- foreach (string file in Directory.GetFiles(CalcString(script[index].Options.ToList())))
- PublicLog.Log(file + '\n');
- break;
- case "bool":
- if (script[index].Options.Length > 2 && script[index].Options[1] == "=")
- {
- List expr = new();
- for (ushort n = 2; n < script[index].Options.Length; n++)
- expr.Add(script[index].Options[n]);
- // сравнение и добавление результата в storage[globalindex]
- SetValue(script[index].Options[0], Compare(expr));
- Debug(new string[] {"y"," bool ","b", script[index].Options[0],
- "w", " = ", "c", GetValue(script[index].Options[0]).ToString() + '\n'});
- }
- else throw new Exception("error: incorrect bool defination\n");
- break;
- case "num":
- if (script[index].Options.Length > 2 && script[index].Options[1] == "=")
- {
- List expr = new();
- for (ushort n = 2; n < script[index].Options.Length; n++)
- {
- expr.Add(script[index].Options[n]);
- }
- SetValue(script[index].Options[0], (double)Calc(expr));
- Debug(new string[] {"y"," num ","b", script[index].Options[0],
- "w", " = ", "c", GetValue(script[index].Options[0]).ToString() + '\n'});
- }
- else throw new Exception("Execute() error: incorrect double defination\n");
- break;
- case "string":
- if (script[index].Options.Length > 2 && script[index].Options[1] == "=")
- {
- List expr = new();
- for (ushort n = 2; n < script[index].Options.Length; n++)
- {
- expr.Add(script[index].Options[n]);
- }
- SetValue(script[index].Options[0], CalcString(expr));
- Debug(new string[] {"y"," string ","b", script[index].Options[0],
- "w", " = ", "c", GetValue(script[index].Options[0]).ToString() + '\n'});
- }
- break;
- case "while":
- if (script[index + 1].Operator != "{") throw new Exception("Execute() error: expect { after for()");
- subscript = SplitScript(script[index + 1].Options[0]);
- while (Compare(script[index].Options.ToList()))
- {
- Execute(subscript);
- }
- index++;
- break;
- case "if":
- if (script[index + 1].Operator != "{") throw new Exception("Execute() error: expect { after for()");
- subscript = SplitScript(script[index + 1].Options[0]);
- if (Compare(script[index].Options.ToList()))
- {
- Execute(subscript);
- }
- index++;
- break;
- case "Download":
- if (fsp is null) fsp = new(mainSocket);
- fsp.DownloadFile(script[index].Options[0], script[index].Options[1]);
- break;
- case "DirDelete":
- Directory.Delete(script[index].Options[0]);
- break;
- case "FileDelete":
- File.Delete(script[index].Options[0]);
- break;
- case "FileWrite":
- File.Create(script[index].Options[0]);
- File.WriteAllText(script[index].Options[0], script[index].Options[1]);
- break;
- case "FileAppend":
- File.Create(script[index].Options[0]);
- File.AppendAllText(script[index].Options[0], script[index].Options[1]);
+ case '"':
+ if (!expr[n].EndsWith("\"")) throw new Exception("Calc() error: invalid value <" + expr[n] + ">\n");
break;
default:
- throw new Exception($"Execute() error: invalid construct: {script[index].Operator}\n");
+ expr[n] = GetValue(expr[n]).ToString();
+ break;
}
}
- Storage.RemoveAt(globalindex);
- globalindex--;
- return null;
-
- // операции со строками
- string CalcString(List expr)
+ // вычисление
+ string rezult = "";
+ for (ushort i = 0; i < expr.Count; i++)
{
- Debug("m", "CalcString(");
- foreach (string part in expr)
- Debug("c", "<", "b", part, "c", ">");
- Debug("m", ")", "y", " started\n");
- // извлечение значений переменных
- for (ushort n = 0; n < expr.Count; n++)
- {
- switch (expr[n][0])
- {
- case '+':
- break;
- case '"':
- if (!expr[n].EndsWith("\"")) throw new Exception("Calc() error: invalid value <" + expr[n] + ">\n");
- break;
- default:
- expr[n] = GetValue(expr[n]).ToString();
- break;
- }
- }
- // вычисление
- string rezult = "";
- for (ushort i = 0; i < expr.Count; i++)
- {
- if (expr[i] == "+")
- {
+ if (expr[i] == "+")
+ {
+ i++;
+ rezult += expr[i];
+ }
+ else rezult = i == 0 ? expr[0] : throw new Exception($"error in Calc(): arg {expr[i]}\n");
+ }
+ if (rezult.Contains("\\n")) rezult = rezult.Replace("\\n", "\n");
+ if (rezult.Contains("\"")) rezult = rezult.Replace("\"", "");
+ Debug("y", " returns <", "b", $"{rezult}", "y", ">\n");
+ return rezult;
+ }
+ // операции с числами
+ double Calc(List expr)
+ {
+ Debug("m", "Calc(");
+ foreach (string part in expr)
+ Debug("c", "<", "b", part, "c", ">");
+ Debug("m", ")", "y", " started\n");
+ // извлечение значений переменных
+ for (ushort n = 0; n < expr.Count; n++)
+ {
+ switch (expr[n][0])
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '+':
+ case '-':
+ case '*':
+ case '/':
+ break;
+ default:
+ expr[n] = GetValue(expr[n]).ToString();
+ break;
+ }
+ }
+ // вычисление
+ double rezult = new();
+ for (ushort i = 0; i < expr.Count; i++)
+ switch (expr[i][0])
+ {
+ case '+':
i++;
- rezult += expr[i];
- }
- else if (i == 0) rezult = expr[0];
- else throw new Exception($"error in Calc(): arg {expr[i]}\n");
- }
- if (rezult.Contains("\\n")) rezult = rezult.Replace("\\n", "\n");
- if (rezult.Contains("\"")) rezult = rezult.Replace("\"", "");
- Debug("y", " returns <", "b", $"{rezult}", "y", ">\n");
- return rezult;
- }
- // операции с числами
- double Calc(List expr)
- {
- Debug("m", "Calc(");
- foreach (string part in expr)
- Debug("c", "<", "b", part, "c", ">");
- Debug("m", ")", "y", " started\n");
- // извлечение значений переменных
- for (ushort n = 0; n < expr.Count; n++)
- {
- switch (expr[n][0])
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case '+':
- case '-':
- case '*':
- case '/':
- break;
- default:
- expr[n] = GetValue(expr[n]).ToString();
- break;
- }
- }
- // вычисление
- double rezult = new();
- for (ushort i = 0; i < expr.Count; i++)
- switch (expr[i][0])
- {
- case '+':
- i++;
- rezult += Convert.ToDouble(expr[i]);
- break;
- case '-':
- i++;
- rezult -= Convert.ToDouble(expr[i]);
- break;
- case '*':
- i++;
- rezult *= Convert.ToDouble(expr[i]);
- break;
- case '/':
- i++;
- rezult /= Convert.ToDouble(expr[i]);
- break;
- default:
- if (i == 0) rezult += Convert.ToDouble(expr[i]);
- else throw new Exception($"error in Calc(): arg {expr[i]}\n");
- break;
- }
- Debug("y", " returns <", "b", $"{rezult}", "y", ">\n");
- return rezult;
- }
- // сравнение
- bool Compare(List expr)
- {
- Debug("m", "Compare(");
- foreach (string part in expr)
- Debug("c", "<", "b", part, "c", ">");
- Debug("m", ")", "y", " started\n");
- // вычисление значений правой и левой части неравенства
- char act = '\0';
- double rezult_0 = new(), rezult_1;
- var _expr = new List();
- for (ushort n = 0; n < expr.Count; n++)
- {
- Debug("m", $" <{expr[n]}>\n");
- switch (expr[n][0])
- {
- case '<':
- case '>':
- act = expr[n][0];
- rezult_0 = Calc(_expr);
- _expr.Clear();
- break;
- case '!':
- case '=':
- act = expr[n][0];
- rezult_0 = Calc(_expr);
- _expr.Clear();
- n++;
- break;
- default:
- _expr.Add(expr[n]);
- break;
- }
- }
- Debug("y", " rezult_0 = <", "b", rezult_0.ToString(), "y", ">\n");
- rezult_1 = Calc(_expr);
- Debug("y", " rezult_1 = <", "b", rezult_1.ToString(), "y", ">\n");
- Debug("y", " act = <", "b", act.ToString(), "y", ">\n");
- bool output = act switch
- {
- '<' => rezult_0 < rezult_1,
- '>' => rezult_0 > rezult_1,
- '!' => rezult_0 != rezult_1,
- '=' => rezult_0 == rezult_1,
- _ => throw new Exception($"error: incorrect comparsion symbol: <{act}>\n"),
- };
- Debug("y", " return <", "c", $"{output}", "y", ">\n");
- return output;
- }
- }
-
- List SplitScript(string text)
- {
- // лист для хранения обработанного текста
- List script = new();
- string construct = "";
- string option = "";
- List options = new();
- for (int index = 0; index < text.Length; index++)
- {
- switch (text[index])
- {
- // конец распознания конструкта
- case ';':
- Debug(text[index].ToString() + '\n');
- // добавление конструкта и его параметров в лист
- if (construct != "") script.Add(new Construction(construct, options));
- construct = "";
- option = "";
- options.Clear();
+ rezult += Convert.ToDouble(expr[i]);
break;
- // распознание параметров конструкта
- case '(':
- Debug(text[index].ToString());
- while (text[index] != ')')
- {
- index++;
- switch (text[index])
- {
- case '"':
- Debug("g", text[index].ToString());
- do
- {
- option += text[index];
- index++;
- Debug("g", text[index].ToString());
- } while (text[index] != '"');
- option += text[index];
- break;
- case ' ':
- case '\t':
- case '\r':
- case '\n':
- break;
- case ')':
- case ',':
- Debug(text[index].ToString());
- options.Add(option);
- option = "";
- break;
- // математика
- case '+':
- case '-':
- case '*':
- case '/':
- case '!':
- case '=':
- Debug(text[index].ToString());
- if (option != "") options.Add(option);
- option = "";
- options.Add(text[index].ToString());
- break;
- default:
- option += text[index];
- Debug("c", text[index].ToString());
- break;
- }
- }
- if (debug && text[index + 1] == ';') PublicLog.Log("y", "\n " + options.Count + " options have read\n");
+ case '-':
+ i++;
+ rezult -= Convert.ToDouble(expr[i]);
break;
- // очистка конструкта от лишних символов
- case ' ':
- case '\t':
- case '\r':
- case '\n':
+ case '*':
+ i++;
+ rezult *= Convert.ToDouble(expr[i]);
break;
- //
- case '{':
- Debug("SplitScript() found <{>");
- // добавление конструкта и его параметров в лист
- if (construct != "") script.Add(new Construction(construct, options));
- options.Clear();
- option = "";
- construct = "";
- index++;
- short bracketBalance = 1;
- while (bracketBalance != 0)
- {
- if (text[index] == '{') bracketBalance++;
- if (text[index] == '}') bracketBalance--;
- option += text[index];
- index++;
- }
- option.Remove(option.Length - 1);
- script.Add(new Construction("{", new List { option }));
- option = "";
- break;
- case '}':
- //throw new Exception($"SplitScript() error: unexpected '}}' on line {line}\n");
+ case '/':
+ i++;
+ rezult /= Convert.ToDouble(expr[i]);
break;
default:
- construct += text[index];
- Debug("m", text[index].ToString());
+ if (i == 0) rezult += Convert.ToDouble(expr[i]);
+ else throw new Exception($"error in Calc(): arg {expr[i]}\n");
+ break;
+ }
+ Debug("y", " returns <", "b", $"{rezult}", "y", ">\n");
+ return rezult;
+ }
+ // сравнение
+ bool Compare(List expr)
+ {
+ Debug("m", "Compare(");
+ foreach (string part in expr)
+ Debug("c", "<", "b", part, "c", ">");
+ Debug("m", ")", "y", " started\n");
+ // вычисление значений правой и левой части неравенства
+ char act = '\0';
+ double rezult_0 = new(), rezult_1;
+ var _expr = new List();
+ for (ushort n = 0; n < expr.Count; n++)
+ {
+ Debug("m", $" <{expr[n]}>\n");
+ switch (expr[n][0])
+ {
+ case '<':
+ case '>':
+ act = expr[n][0];
+ rezult_0 = Calc(_expr);
+ _expr.Clear();
+ break;
+ case '!':
+ case '=':
+ act = expr[n][0];
+ rezult_0 = Calc(_expr);
+ _expr.Clear();
+ n++;
+ break;
+ default:
+ _expr.Add(expr[n]);
break;
}
}
- // возврат листа
- return script;
- }
-
- class Construction
- {
- public string Operator { get; private set; }
- public string[] Options { get; private set; }
- public Construction(string oper, List opts)
+ Debug("y", " rezult_0 = <", "b", rezult_0.ToString(), "y", ">\n");
+ rezult_1 = Calc(_expr);
+ Debug("y", " rezult_1 = <", "b", rezult_1.ToString(), "y", ">\n");
+ Debug("y", " act = <", "b", act.ToString(), "y", ">\n");
+ bool output = act switch
{
- Operator = oper;
- Options = opts.ToArray();
- }
+ '<' => rezult_0 < rezult_1,
+ '>' => rezult_0 > rezult_1,
+ '!' => rezult_0 != rezult_1,
+ '=' => rezult_0 == rezult_1,
+ _ => throw new Exception($"error: incorrect comparsion symbol: <{act}>\n"),
+ };
+ Debug("y", " return <", "c", $"{output}", "y", ">\n");
+ return output;
}
}
-}
\ No newline at end of file
+
+ List SplitScript(string text)
+ {
+ // лист для хранения обработанного текста
+ List script = new();
+ string construct = "";
+ string option = "";
+ List options = new();
+ for (int index = 0; index < text.Length; index++)
+ {
+ switch (text[index])
+ {
+ // конец распознания конструкта
+ case ';':
+ Debug(text[index].ToString() + '\n');
+ // добавление конструкта и его параметров в лист
+ if (construct != "") script.Add(new Construction(construct, options));
+ construct = "";
+ option = "";
+ options.Clear();
+ break;
+ // распознание параметров конструкта
+ case '(':
+ Debug(text[index].ToString());
+ while (text[index] != ')')
+ {
+ index++;
+ switch (text[index])
+ {
+ case '"':
+ Debug("g", text[index].ToString());
+ do
+ {
+ option += text[index];
+ index++;
+ Debug("g", text[index].ToString());
+ } while (text[index] != '"');
+ option += text[index];
+ break;
+ case ' ':
+ case '\t':
+ case '\r':
+ case '\n':
+ break;
+ case ')':
+ case ',':
+ Debug(text[index].ToString());
+ options.Add(option);
+ option = "";
+ break;
+ // математика
+ case '+':
+ case '-':
+ case '*':
+ case '/':
+ case '!':
+ case '=':
+ Debug(text[index].ToString());
+ if (option != "") options.Add(option);
+ option = "";
+ options.Add(text[index].ToString());
+ break;
+ default:
+ option += text[index];
+ Debug("c", text[index].ToString());
+ break;
+ }
+ }
+ if (debug && text[index + 1] == ';') PublicLog.Log("y", "\n " + options.Count + " options have read\n");
+ break;
+ // очистка конструкта от лишних символов
+ case ' ':
+ case '\t':
+ case '\r':
+ case '\n':
+ break;
+ //
+ case '{':
+ Debug("SplitScript() found <{>");
+ // добавление конструкта и его параметров в лист
+ if (construct != "") script.Add(new Construction(construct, options));
+ options.Clear();
+ option = "";
+ construct = "";
+ index++;
+ short bracketBalance = 1;
+ while (bracketBalance != 0)
+ {
+ if (text[index] == '{') bracketBalance++;
+ if (text[index] == '}') bracketBalance--;
+ option += text[index];
+ index++;
+ }
+ option.Remove(option.Length - 1);
+ script.Add(new Construction("{", new List { option }));
+ option = "";
+ break;
+ case '}':
+ //throw new Exception($"SplitScript() error: unexpected '}}' on line {line}\n");
+ break;
+ default:
+ construct += text[index];
+ Debug("m", text[index].ToString());
+ break;
+ }
+ }
+ // возврат листа
+ return script;
+ }
+
+ class Construction
+ {
+ public string Operator { get; private set; }
+ public string[] Options { get; private set; }
+ public Construction(string oper, List opts)
+ {
+ Operator = oper;
+ Options = opts.ToArray();
+ }
+ }
+}
diff --git a/dtscript/dtscript.csproj b/dtscript/dtscript.csproj
index 0473cc1..1be41bd 100644
--- a/dtscript/dtscript.csproj
+++ b/dtscript/dtscript.csproj
@@ -81,7 +81,7 @@
-
+
{ce793497-2d5c-42d8-b311-e9b32af9cdfb}
DTLib
@@ -89,7 +89,7 @@
del /q /f dtscript.exe.config
-copy dtscript.exe C:\projects\c#\dtlauncher\dtlauncher-server-win\bin\share\client\dtscript.exe
+copy dtscript.exe ..\..\dtlauncher-server-win\bin\share\client\dtscript.exe
diff --git a/updater/Updater.cs b/updater/Updater.cs
index c214ad3..bff4d9e 100644
--- a/updater/Updater.cs
+++ b/updater/Updater.cs
@@ -6,6 +6,7 @@ using System.Text;
using DTLib;
using DTLib.Filesystem;
using DTLib.Network;
+using DTLib.Extensions;
namespace updater
{
@@ -87,9 +88,9 @@ namespace updater
{
lock (new object())
{
- if (msg.Length == 1) OldFilework.LogToFile(logfile, msg[0]);
+ if (msg.Length == 1) File.AppendAllText(logfile, msg[0]);
else if (msg.Length % 2 != 0) throw new Exception("incorrect array to log\n");
- else OldFilework.LogToFile(logfile, msg.MergeToString());
+ else File.AppendAllText(logfile, msg.MergeToString());
ColoredConsole.Write(msg);
}
}
diff --git a/updater/updater.csproj b/updater/updater.csproj
index b04cf89..a2c206c 100644
--- a/updater/updater.csproj
+++ b/updater/updater.csproj
@@ -76,7 +76,7 @@
-
+
{ce793497-2d5c-42d8-b311-e9b32af9cdfb}
DTLib
@@ -84,10 +84,10 @@
del /f /q dtlauncher.exe.config
-copy dtlauncher.exe C:\projects\c#\dtlauncher\dtlauncher-server-win\bin\share\client\dtlauncher.exe
-copy DTLib.dll C:\projects\c#\dtlauncher\dtlauncher-server-win\bin\share\client\DTLib.dll
-copy dtlauncher.exe C:\projects\c#\dtlauncher\release\dtlauncher.exe
-copy DTLib.dll C:\projects\c#\dtlauncher\release\DTLib.dll
+copy dtlauncher.exe ..\..\dtlauncher-server-win\bin\share\client\dtlauncher.exe
+copy DTLib.dll ..\..\dtlauncher-server-win\bin\share\client\DTLib.dll
+copy dtlauncher.exe ..\..\release\dtlauncher.exe
+copy DTLib.dll ..\..\release\DTLib.dll