diff --git a/minecraft-launcher-client/Network.cs b/minecraft-launcher-client/Network.cs
index b7fb0b2..6dd7469 100644
--- a/minecraft-launcher-client/Network.cs
+++ b/minecraft-launcher-client/Network.cs
@@ -1,4 +1,5 @@
-using System.Net;
+using System;
+using System.Net;
using System.Net.Sockets;
using System.Threading;
using DTLib;
@@ -7,6 +8,7 @@ using DTLib.Extensions;
using DTLib.Filesystem;
using DTLib.Logging;
using DTLib.Network;
+using DTLib.XXHash;
using static launcher_client.Launcher;
namespace launcher_client;
@@ -57,15 +59,26 @@ public class Network
string manifestContent = Fsp.DownloadFileToMemory(manifestPath).BytesToString();
Logger.LogDebug(nameof(Network), manifestContent);
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))
+ if (!File.Exists(fileOnClient))
{
Logger.LogDebug(nameof(Network), $"downloading {fileOnClient}");
Fsp.DownloadFile(Path.Concat(dirOnServer, fileOnServerData.Key), fileOnClient);
}
+ else if (overwrite)
+ {
+ var fileStream = File.OpenRead(fileOnClient);
+ ulong hash = xxHash64.ComputeHash(fileStream);
+ fileStream.Close();
+ string hashStr = BitConverter.GetBytes(hash).HashToString();
+ if (hashStr != fileOnServerData.Value)
+ {
+ Logger.LogDebug(nameof(Network), $"downloading {fileOnClient} (hash {hashStr} != {fileOnServerData.Value})");
+ Fsp.DownloadFile(Path.Concat(dirOnServer, fileOnServerData.Key), fileOnClient);
+ }
+ }
}
// удаление лишних файлов
if (delete_excess)
diff --git a/minecraft-launcher-client/launcher-client.csproj b/minecraft-launcher-client/launcher-client.csproj
index 41812ab..49b8cee 100644
--- a/minecraft-launcher-client/launcher-client.csproj
+++ b/minecraft-launcher-client/launcher-client.csproj
@@ -23,8 +23,9 @@
all
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/minecraft-launcher-server/Manifests.cs b/minecraft-launcher-server/Manifests.cs
index 540810c..ca3c709 100644
--- a/minecraft-launcher-server/Manifests.cs
+++ b/minecraft-launcher-server/Manifests.cs
@@ -1,8 +1,5 @@
using System.Linq;
-using System.Text;
-using DTLib;
-using DTLib.Extensions;
-using DTLib.Filesystem;
+using DTLib.XXHash;
using static launcher_server.Server;
namespace launcher_server;
@@ -20,7 +17,6 @@ public static class Manifests
}
StringBuilder manifestBuilder = new();
- Hasher hasher = new();
var manifestPath = Path.Concat(dir, "manifest.dtsod");
if (Directory.GetFiles(dir).Contains(manifestPath))
File.Delete(manifestPath);
@@ -29,8 +25,11 @@ public static class Manifests
var fileRelative = fileInDir.RemoveBase(dir);
manifestBuilder.Append(fileRelative);
manifestBuilder.Append(": \"");
- byte[] hash = hasher.HashFile(Path.Concat(fileInDir));
- manifestBuilder.Append(hash.HashToString());
+ var fileStream = File.OpenRead(fileInDir);
+ ulong hash = xxHash64.ComputeHash(fileStream);
+ fileStream.Close();
+ string hashStr = BitConverter.GetBytes(hash).HashToString();
+ manifestBuilder.Append(hashStr);
manifestBuilder.Append("\";\n");
}
File.WriteAllText(manifestPath, manifestBuilder.ToString().Replace('\\','/'));
@@ -59,7 +58,7 @@ public static class Manifests
}
dirlist_content_builder
.Append("\t\"")
- .Append(dirs[dirs.Length-1].RemoveBase(sync_and_remove_dir).Str.Replace('\\','/'))
+ .Append(dirs[^1].RemoveBase(sync_and_remove_dir).Str.Replace('\\','/'))
.Append("\"\n");
dirlist_content_builder.Append("];");
diff --git a/minecraft-launcher-server/launcher-server.csproj b/minecraft-launcher-server/launcher-server.csproj
index a047f49..e8c12f9 100644
--- a/minecraft-launcher-server/launcher-server.csproj
+++ b/minecraft-launcher-server/launcher-server.csproj
@@ -12,8 +12,9 @@
true
-
-
-
+
+
+
+
\ No newline at end of file