Compare commits
No commits in common. "6624df6bc0f319104115fe525b3dc3ac53bcf910" and "46dce9d6c791aaeb1270bdb0f7451c245804b7b3" have entirely different histories.
6624df6bc0
...
46dce9d6c7
@ -1,4 +1,6 @@
|
||||
namespace launcher_client;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace launcher_client;
|
||||
|
||||
internal static partial class Launcher
|
||||
{
|
||||
|
||||
@ -2,27 +2,33 @@
|
||||
using System.Diagnostics;
|
||||
using System.Dynamic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using DTLib.Console;
|
||||
using DTLib.Dtsod;
|
||||
using DTLib.Extensions;
|
||||
using DTLib.Logging;
|
||||
using DTLib.Network;
|
||||
using DTLib.Filesystem;
|
||||
using Directory = DTLib.Filesystem.Directory;
|
||||
using File = DTLib.Filesystem.File;
|
||||
using static launcher_client.Network;
|
||||
|
||||
namespace launcher_client;
|
||||
|
||||
internal static partial class Launcher
|
||||
{
|
||||
private static FileLogger _fileLogger = new("launcher-logs", "launcher-client");
|
||||
public static ILogger Logger = new CompositeLogger(
|
||||
private static FileLogger _fileLogger = new("launcher-logs", "launcher_client");
|
||||
private static ILogger logger = new CompositeLogger(
|
||||
_fileLogger,
|
||||
new ConsoleLogger());
|
||||
public static LauncherConfig Config = null!;
|
||||
private static Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
public static bool debug, offline, updated;
|
||||
private static FSP FSP = new(mainSocket);
|
||||
private static dynamic tabs = new ExpandoObject();
|
||||
private static LauncherConfig config = null!;
|
||||
|
||||
private static void Main(string[] args)
|
||||
{
|
||||
@ -40,12 +46,13 @@ internal static partial class Launcher
|
||||
#endif
|
||||
if (args.Contains("offline")) offline = true;
|
||||
if (args.Contains("updated")) updated = true;
|
||||
Config = !File.Exists(LauncherConfig.ConfigFilePath)
|
||||
config = !File.Exists(LauncherConfig.ConfigFilePath)
|
||||
? LauncherConfig.CreateDefault()
|
||||
: LauncherConfig.LoadFromFile();
|
||||
|
||||
Logger.DebugLogEnabled = debug;
|
||||
Logger.LogInfo("Main", "launcher is starting");
|
||||
DTLibInternalLogging.SetLogger(logger);
|
||||
logger.DebugLogEnabled = debug;
|
||||
logger.LogInfo("Main", "launcher is starting");
|
||||
|
||||
if(File.Exists("minecraft-launcher.exe_old"))
|
||||
File.Delete("minecraft-launcher.exe_old");
|
||||
@ -55,8 +62,8 @@ internal static partial class Launcher
|
||||
{
|
||||
ConnectToLauncherServer();
|
||||
mainSocket.SendPackage("requesting launcher update");
|
||||
Fsp.DownloadFile("minecraft-launcher.exe_new");
|
||||
Logger.LogInfo("Main", "minecraft-launcher.exe_new downloaded");
|
||||
FSP.DownloadFile("minecraft-launcher.exe_new");
|
||||
logger.LogInfo("Main", "minecraft-launcher.exe_new downloaded");
|
||||
System.IO.File.Move("minecraft-launcher.exe", "minecraft-launcher.exe_old");
|
||||
Process.Start("cmd","/c " +
|
||||
"move minecraft-launcher.exe_new minecraft-launcher.exe && " +
|
||||
@ -71,10 +78,10 @@ internal static partial class Launcher
|
||||
tabs.Log = "";
|
||||
tabs.Current = "";
|
||||
string username = "";
|
||||
if (!Config.Username.IsNullOrEmpty())
|
||||
if (!config.Username.IsNullOrEmpty())
|
||||
{
|
||||
tabs.Login = tabs.Login.Remove(833, Config.Username.Length).Insert(833, Config.Username);
|
||||
username = Config.Username;
|
||||
tabs.Login = tabs.Login.Remove(833, config.Username.Length).Insert(833, config.Username);
|
||||
username = config.Username;
|
||||
}
|
||||
|
||||
RenderTab(tabs.Login);
|
||||
@ -104,8 +111,8 @@ internal static partial class Launcher
|
||||
RenderTab(tabs.Login);
|
||||
if (_username.Length < 5)
|
||||
throw new Exception("username length should be > 4 and < 17");
|
||||
Config.Username = _username;
|
||||
Config.Save();
|
||||
config.Username = _username;
|
||||
config.Save();
|
||||
username = _username;
|
||||
tabs.Login = tabs.Login.Remove(833, _username.Length).Insert(833, _username);
|
||||
RenderTab(tabs.Login);
|
||||
@ -121,21 +128,30 @@ internal static partial class Launcher
|
||||
if (!offline)
|
||||
{
|
||||
ConnectToLauncherServer();
|
||||
UpdateGame();
|
||||
//обновление файлов клиента
|
||||
logger.LogInfo("Main", "updating client...");
|
||||
FSP.DownloadByManifest("download_if_not_exist", Directory.GetCurrent());
|
||||
FSP.DownloadByManifest("sync_always", Directory.GetCurrent(), true);
|
||||
foreach (string dir in new DtsodV23(FSP
|
||||
.DownloadFileToMemory("sync_and_remove\\dirlist.dtsod")
|
||||
.BytesToString())["dirs"])
|
||||
FSP.DownloadByManifest("sync_and_remove\\" + dir,
|
||||
Directory.GetCurrent() + '\\' + dir, true, true);
|
||||
logger.LogInfo("Main", "client updated");
|
||||
}
|
||||
|
||||
// запуск майнкрафта
|
||||
Logger.LogInfo("Main", "launching minecraft");
|
||||
string gameOptions = ConstructGameLaunchArgs(Config.Username,
|
||||
NameUUIDFromString("OfflinePlayer:" + Config.Username),
|
||||
Config.GameMemory,
|
||||
Config.GameWindowWidth,
|
||||
Config.GameWindowHeight,
|
||||
logger.LogInfo("Main", "launching minecraft");
|
||||
string gameOptions = ConstructGameLaunchArgs(config.Username,
|
||||
NameUUIDFromString("OfflinePlayer:" + config.Username),
|
||||
config.GameMemory,
|
||||
config.GameWindowWidth,
|
||||
config.GameWindowHeight,
|
||||
Directory.GetCurrent());
|
||||
Logger.LogDebug("LaunchGame", gameOptions);
|
||||
var gameProcess = Process.Start(Config.JavaPath.Str, gameOptions);
|
||||
logger.LogDebug("LaunchGame", gameOptions);
|
||||
var gameProcess = Process.Start($"{config.JavaPath}\\java.exe", gameOptions);
|
||||
gameProcess.WaitForExit();
|
||||
Logger.LogInfo("Main", "minecraft closed");
|
||||
logger.LogInfo("Main", "minecraft closed");
|
||||
}
|
||||
break;
|
||||
case ConsoleKey.F2:
|
||||
@ -152,7 +168,7 @@ internal static partial class Launcher
|
||||
if (tabs.Current == tabs.Exit)
|
||||
{
|
||||
Console.Clear();
|
||||
// Console.BufferHeight = 9999;
|
||||
Console.BufferHeight = 9999;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@ -165,16 +181,50 @@ internal static partial class Launcher
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError("Main", ex);
|
||||
logger.LogError("Main", ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError("Main", ex);
|
||||
logger.LogError("Main", ex);
|
||||
ColoredConsole.Write("gray", "press any key to close...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
Console.CursorVisible = true;
|
||||
}
|
||||
|
||||
// подключение серверу
|
||||
private static void ConnectToLauncherServer()
|
||||
{
|
||||
if (mainSocket.Connected)
|
||||
{
|
||||
logger.LogInfo(nameof(ConnectToLauncherServer), "socket is connected already. disconnecting...");
|
||||
mainSocket.Shutdown(SocketShutdown.Both);
|
||||
mainSocket.Close();
|
||||
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
FSP = new FSP(mainSocket);
|
||||
FSP.debug = debug;
|
||||
}
|
||||
|
||||
while (true)
|
||||
try
|
||||
{
|
||||
logger.LogInfo(nameof(ConnectToLauncherServer), $"connecting to server {config.ServerAddress}:{config.ServerPort}");
|
||||
var ip = Dns.GetHostAddresses(config.ServerAddress)[0];
|
||||
mainSocket.Connect(new IPEndPoint(ip, config.ServerPort));
|
||||
logger.LogInfo(nameof(ConnectToLauncherServer), $"connected to server {ip}");
|
||||
break;
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
logger.LogError(nameof(ConnectToLauncherServer), ex);
|
||||
Thread.Sleep(2000);
|
||||
}
|
||||
|
||||
mainSocket.ReceiveTimeout = 2500;
|
||||
mainSocket.SendTimeout = 2500;
|
||||
mainSocket.GetAnswer("requesting user name");
|
||||
mainSocket.SendPackage("minecraft-launcher");
|
||||
mainSocket.GetAnswer("minecraft-launcher OK");
|
||||
}
|
||||
|
||||
private static void RenderTab(string tab, ushort bufferHeight = 30)
|
||||
@ -182,7 +232,7 @@ internal static partial class Launcher
|
||||
tabs.Current = tab;
|
||||
Console.Clear();
|
||||
Console.SetWindowSize(80, 30);
|
||||
// Console.SetBufferSize(80, bufferHeight);
|
||||
Console.SetBufferSize(80, bufferHeight);
|
||||
ColoredConsole.Write("w", tab);
|
||||
}
|
||||
|
||||
|
||||
@ -5,12 +5,12 @@ namespace launcher_client;
|
||||
|
||||
public class LauncherConfig
|
||||
{
|
||||
public static IOPath ConfigFilePath = "minecraft-launcher.dtsod";
|
||||
public static string ConfigFilePath = "launcher.dtsod";
|
||||
|
||||
public int GameMemory = 3000;
|
||||
public int GameWindowHeight = 500;
|
||||
public int GameWindowWidth = 900;
|
||||
public IOPath JavaPath = "jre/bin/java.exe";
|
||||
public string JavaPath = "jre\\bin";
|
||||
public string ServerAddress = "127.0.0.1";
|
||||
public int ServerPort = 25000;
|
||||
public string Username = "";
|
||||
@ -36,7 +36,7 @@ public class LauncherConfig
|
||||
{ "gameMemory", GameMemory },
|
||||
{ "gameWindowHeight", GameWindowHeight },
|
||||
{ "gameWindowWidth", GameWindowWidth },
|
||||
{ "javaPath", JavaPath.Str },
|
||||
{ "javaPath", JavaPath },
|
||||
{ "serverAddress", ServerAddress },
|
||||
{ "serverPort", ServerPort },
|
||||
{ "username", Username },
|
||||
|
||||
@ -1,91 +0,0 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
using DTLib;
|
||||
using DTLib.Dtsod;
|
||||
using DTLib.Extensions;
|
||||
using DTLib.Filesystem;
|
||||
using DTLib.Logging;
|
||||
using DTLib.Network;
|
||||
using static launcher_client.Launcher;
|
||||
|
||||
namespace launcher_client;
|
||||
|
||||
public class Network
|
||||
{
|
||||
public static Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
public static FSP Fsp = new(mainSocket);
|
||||
|
||||
// подключение серверу
|
||||
public static void ConnectToLauncherServer()
|
||||
{
|
||||
if (mainSocket.Connected)
|
||||
{
|
||||
Logger.LogInfo(nameof(Network), "socket is connected already. disconnecting...");
|
||||
mainSocket.Shutdown(SocketShutdown.Both);
|
||||
mainSocket.Close();
|
||||
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
Fsp = new(mainSocket);
|
||||
}
|
||||
|
||||
while (true)
|
||||
try
|
||||
{
|
||||
Logger.LogInfo(nameof(Network), $"connecting to server {Config.ServerAddress}:{Config.ServerPort}");
|
||||
var ip = Dns.GetHostAddresses(Config.ServerAddress)[0];
|
||||
mainSocket.Connect(new IPEndPoint(ip, Config.ServerPort));
|
||||
Logger.LogInfo(nameof(Network), $"connected to server {ip}");
|
||||
break;
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
Logger.LogError(nameof(Network), ex);
|
||||
Thread.Sleep(2000);
|
||||
}
|
||||
|
||||
mainSocket.ReceiveTimeout = 2500;
|
||||
mainSocket.SendTimeout = 2500;
|
||||
mainSocket.GetAnswer("requesting user name");
|
||||
mainSocket.SendPackage("minecraft-launcher");
|
||||
mainSocket.GetAnswer("minecraft-launcher OK");
|
||||
}
|
||||
|
||||
public static void DownloadByManifest(IOPath dirOnServer, IOPath dirOnClient, bool overwrite = false, bool delete_excess = false)
|
||||
{
|
||||
var manifestPath = Path.Concat(dirOnServer, "manifest.dtsod");
|
||||
Logger.LogDebug(nameof(Network), manifestPath);
|
||||
string manifestContent = Fsp.DownloadFileToMemory(manifestPath).BytesToString();
|
||||
var manifest = new DtsodV23(manifestContent);
|
||||
var hasher = new Hasher();
|
||||
foreach (var fileOnServerData in manifest)
|
||||
{
|
||||
IOPath fileOnClient = Path.Concat(dirOnClient, fileOnServerData.Key);
|
||||
if (!File.Exists(fileOnClient) || (overwrite && hasher.HashFile(fileOnClient).HashToString() != fileOnServerData.Value))
|
||||
Fsp.DownloadFile(Path.Concat(dirOnServer, fileOnServerData.Key), fileOnClient);
|
||||
}
|
||||
// удаление лишних файлов
|
||||
if (delete_excess)
|
||||
{
|
||||
foreach (var file in Directory.GetAllFiles(dirOnClient))
|
||||
{
|
||||
if (!manifest.ContainsKey(file.RemoveBase(dirOnClient).Str.Replace('\\','/')))
|
||||
File.Delete(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateGame()
|
||||
{
|
||||
//обновление файлов клиента
|
||||
Logger.LogInfo(nameof(Network), "updating client...");
|
||||
DownloadByManifest("download_if_not_exist", Directory.GetCurrent());
|
||||
DownloadByManifest("sync_always", Directory.GetCurrent(), true);
|
||||
var dirlistDtsod = new DtsodV23(Fsp
|
||||
.DownloadFileToMemory(Path.Concat("sync_and_remove","dirlist.dtsod"))
|
||||
.BytesToString());
|
||||
foreach (string dir in dirlistDtsod["dirs"])
|
||||
DownloadByManifest(Path.Concat("sync_and_remove", dir),
|
||||
Path.Concat(Directory.GetCurrent(), dir), true, true);
|
||||
Logger.LogInfo(nameof(Network), "client updated");
|
||||
}
|
||||
}
|
||||
@ -13,8 +13,8 @@
|
||||
<EmbeddedResource Include="gui\**" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DTLib.Dtsod" Version="1.3.1" />
|
||||
<PackageReference Include="DTLib.Logging" Version="1.3.1" />
|
||||
<PackageReference Include="DTLib.Network" Version="1.3.3" />
|
||||
<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>
|
||||
8
minecraft-launcher-client/launcher.dtsod
Normal file
8
minecraft-launcher-client/launcher.dtsod
Normal file
@ -0,0 +1,8 @@
|
||||
gameMemory: "3000";
|
||||
gameWindowWidth: "1600";
|
||||
gameWindowHeight: "1000";
|
||||
javaPath: "java\bin";
|
||||
serverAddress: "127.0.0.1";
|
||||
serverPort: 25000;
|
||||
username: "";
|
||||
uuid: "";
|
||||
2
minecraft-launcher-client/publish.sh
Executable file → Normal file
2
minecraft-launcher-client/publish.sh
Executable file → Normal file
@ -1,6 +1,6 @@
|
||||
dotnet publish -c release -o bin/publish \
|
||||
--self-contained \
|
||||
--use-current-runtime \
|
||||
-r win-x64 \
|
||||
-p:PublishSingleFile=true \
|
||||
-p:PublishTrimmed=true \
|
||||
-p:TrimMode=partial \
|
||||
|
||||
@ -1,69 +0,0 @@
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using DTLib;
|
||||
using DTLib.Extensions;
|
||||
using DTLib.Filesystem;
|
||||
using static launcher_server.Server;
|
||||
|
||||
namespace launcher_server;
|
||||
|
||||
public static class Manifests
|
||||
{
|
||||
static object manifestLocker = new();
|
||||
|
||||
public static void CreateManifest(IOPath dir)
|
||||
{
|
||||
if(!Directory.Exists(dir))
|
||||
{
|
||||
Directory.Create(dir);
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder manifestBuilder = new();
|
||||
Hasher hasher = new();
|
||||
var manifestPath = Path.Concat(dir, "manifest.dtsod");
|
||||
if (Directory.GetFiles(dir).Contains(manifestPath))
|
||||
File.Delete(manifestPath);
|
||||
foreach (var fileInDir in Directory.GetAllFiles(dir))
|
||||
{
|
||||
var fileRelative = fileInDir.RemoveBase(dir);
|
||||
manifestBuilder.Append(fileRelative);
|
||||
manifestBuilder.Append(": \"");
|
||||
byte[] hash = hasher.HashFile(Path.Concat(fileInDir));
|
||||
manifestBuilder.Append(hash.HashToString());
|
||||
manifestBuilder.Append("\";\n");
|
||||
}
|
||||
File.WriteAllText(manifestPath, manifestBuilder.ToString().Replace('\\','/'));
|
||||
}
|
||||
|
||||
public static void CreateAllManifests()
|
||||
{
|
||||
lock (manifestLocker)
|
||||
{
|
||||
var sync_and_remove_dir = Path.Concat(shared_dir, "sync_and_remove");
|
||||
CreateManifest(Path.Concat(shared_dir, "download_if_not_exist"));
|
||||
CreateManifest(Path.Concat(shared_dir, "sync_always"));
|
||||
if (!Directory.Exists(sync_and_remove_dir))
|
||||
Directory.Create(sync_and_remove_dir);
|
||||
else foreach (var dir in Directory.GetDirectories(sync_and_remove_dir))
|
||||
CreateManifest(dir);
|
||||
StringBuilder dirlist_content_builder = new("dirs: [\n");
|
||||
|
||||
var dirs = Directory.GetDirectories(sync_and_remove_dir);
|
||||
for (var i = 0; i < dirs.Length-1; i++)
|
||||
{
|
||||
dirlist_content_builder
|
||||
.Append("\t\"")
|
||||
.Append(dirs[i].RemoveBase(sync_and_remove_dir).Str.Replace('\\','/'))
|
||||
.Append("\",\n");
|
||||
}
|
||||
dirlist_content_builder
|
||||
.Append("\t\"")
|
||||
.Append(dirs[dirs.Length-1].RemoveBase(sync_and_remove_dir).Str.Replace('\\','/'))
|
||||
.Append("\"\n");
|
||||
|
||||
dirlist_content_builder.Append("];");
|
||||
File.WriteAllText(Path.Concat(sync_and_remove_dir, "dirlist.dtsod"), dirlist_content_builder.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
@ -14,12 +15,13 @@ namespace launcher_server;
|
||||
static class Server
|
||||
{
|
||||
private static ILogger logger = new CompositeLogger(
|
||||
new FileLogger("logs","launcher-server"),
|
||||
new FileLogger("logs","launcher_server"),
|
||||
new ConsoleLogger());
|
||||
static readonly Socket mainSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
static DtsodV23 config = null!;
|
||||
public static readonly IOPath shared_dir = "public";
|
||||
static bool debug;
|
||||
|
||||
static object manifestLocker = new();
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
@ -28,15 +30,15 @@ static class Server
|
||||
Console.Title = "minecraft_launcher_server";
|
||||
Console.InputEncoding = Encoding.Unicode;
|
||||
Console.OutputEncoding = Encoding.Unicode;
|
||||
|
||||
config = new DtsodV23(File.ReadAllText("minecraft-launcher-server.dtsod"));
|
||||
|
||||
DTLibInternalLogging.SetLogger(logger);
|
||||
config = new DtsodV23(File.ReadAllText("launcher-server.dtsod"));
|
||||
if (args.Contains("debug")) debug = true;
|
||||
logger.LogInfo("Main", $"local address: {config["local_ip"]}");
|
||||
logger.LogInfo("Main", $"public address: {Functions.GetPublicIP()}");
|
||||
logger.LogInfo("Main", $"public address: {OldNetwork.GetPublicIP()}");
|
||||
logger.LogInfo("Main", $"port: {config["local_port"]}");
|
||||
mainSocket.Bind(new IPEndPoint(IPAddress.Parse(config["local_ip"]), config["local_port"]));
|
||||
mainSocket.Listen(1000);
|
||||
Manifests.CreateAllManifests();
|
||||
CreateManifests();
|
||||
logger.LogInfo("Main", "server started succesfully");
|
||||
// запуск отдельного потока для каждого юзера
|
||||
logger.LogInfo("Main", "waiting for users");
|
||||
@ -65,7 +67,7 @@ static class Server
|
||||
handlerSocket.SendPackage("requesting user name");
|
||||
string connectionString = handlerSocket.GetPackage().BytesToString();
|
||||
FSP fsp = new(handlerSocket);
|
||||
|
||||
FSP.debug = debug;
|
||||
// запрос от апдейтера
|
||||
if (connectionString == "minecraft-launcher")
|
||||
{
|
||||
@ -81,14 +83,12 @@ static class Server
|
||||
{
|
||||
case "requesting launcher update":
|
||||
logger.LogInfo(nameof(HandleUser), "updater requested launcher update");
|
||||
// ReSharper disable once InconsistentlySynchronizedField
|
||||
fsp.UploadFile(Path.Concat(shared_dir, "minecraft-launcher.exe"));
|
||||
fsp.UploadFile("share\\minecraft-launcher.exe");
|
||||
break;
|
||||
case "requesting file download":
|
||||
var file = handlerSocket.GetPackage().BytesToString();
|
||||
logger.LogInfo(nameof(HandleUser), $"updater requested file {file}");
|
||||
// ReSharper disable once InconsistentlySynchronizedField
|
||||
fsp.UploadFile(Path.Concat(shared_dir, file));
|
||||
fsp.UploadFile($"share\\{file}");
|
||||
break;
|
||||
default:
|
||||
throw new Exception("unknown request: " + request);
|
||||
@ -114,5 +114,30 @@ static class Server
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void CreateManifests()
|
||||
{
|
||||
lock (manifestLocker)
|
||||
{
|
||||
FSP.CreateManifest("share\\download_if_not_exist");
|
||||
FSP.CreateManifest("share\\sync_always");
|
||||
if(!Directory.Exists("share\\sync_and_remove"))
|
||||
{
|
||||
Directory.Create("share\\sync_and_remove");
|
||||
logger.LogInfo(nameof(CreateManifests), "can't create manifest, dir <share\\sync_and_remove> doesn't exist");
|
||||
}
|
||||
else foreach (string dir in Directory.GetDirectories("share\\sync_and_remove"))
|
||||
FSP.CreateManifest(dir);
|
||||
if(Directory.GetDirectories("share\\sync_and_remove").Length==0)
|
||||
File.WriteAllText("share\\sync_and_remove\\dirlist.dtsod", "dirs: [ ];");
|
||||
else
|
||||
{
|
||||
File.WriteAllText("share\\sync_and_remove\\dirlist.dtsod",
|
||||
"dirs: [\""
|
||||
+ Directory.GetDirectories("share\\sync_and_remove")
|
||||
.MergeToString("\", \"")
|
||||
.Replace("share\\sync_and_remove\\", "")
|
||||
+ "\"];");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -9,8 +9,13 @@
|
||||
<ApplicationIcon>launcher.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DTLib.Dtsod" Version="1.3.1" />
|
||||
<PackageReference Include="DTLib.Logging" Version="1.3.1" />
|
||||
<PackageReference Include="DTLib.Network" Version="1.3.3" />
|
||||
<None Update="launcher-server.dtsod">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</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>
|
||||
@ -1,2 +1,2 @@
|
||||
local_ip: "127.0.0.1";
|
||||
local_port: 25000;
|
||||
local_port: 25000;
|
||||
@ -1,11 +0,0 @@
|
||||
# put this file in /etc/systemd/system/
|
||||
[Unit]
|
||||
Description=minecraft launcher backend in c#
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/minecraft-launcher/minecraft-launcher-server/bin/publish
|
||||
ExecStart=/opt/minecraft-launcher/minecraft-launcher-server/bin/publish/minecraft-launcher-server
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@ -1,10 +0,0 @@
|
||||
dotnet publish -c release -o bin/publish \
|
||||
--self-contained \
|
||||
--use-current-runtime \
|
||||
-p:PublishSingleFile=true \
|
||||
-p:PublishTrimmed=true \
|
||||
-p:TrimMode=partial \
|
||||
-p:EnableCompressionInSingleFile=true \
|
||||
-p:OptimizationPreference=Size \
|
||||
-p:InvariantGlobalization=true \
|
||||
-p:DebugType=none
|
||||
Loading…
Reference in New Issue
Block a user