added DTLib.XXHash

This commit is contained in:
Timerix22 2024-01-07 21:18:27 +06:00
parent b8ba4adfb3
commit e1f851384a
4 changed files with 31 additions and 17 deletions

View File

@ -1,4 +1,5 @@
using System.Net; using System;
using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
using DTLib; using DTLib;
@ -7,6 +8,7 @@ using DTLib.Extensions;
using DTLib.Filesystem; using DTLib.Filesystem;
using DTLib.Logging; using DTLib.Logging;
using DTLib.Network; using DTLib.Network;
using DTLib.XXHash;
using static launcher_client.Launcher; using static launcher_client.Launcher;
namespace launcher_client; namespace launcher_client;
@ -57,15 +59,26 @@ public class Network
string manifestContent = Fsp.DownloadFileToMemory(manifestPath).BytesToString(); string manifestContent = Fsp.DownloadFileToMemory(manifestPath).BytesToString();
Logger.LogDebug(nameof(Network), manifestContent); Logger.LogDebug(nameof(Network), manifestContent);
var manifest = new DtsodV23(manifestContent); var manifest = new DtsodV23(manifestContent);
var hasher = new Hasher();
foreach (var fileOnServerData in manifest) foreach (var fileOnServerData in manifest)
{ {
IOPath fileOnClient = Path.Concat(dirOnClient, fileOnServerData.Key); 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}"); Logger.LogDebug(nameof(Network), $"downloading {fileOnClient}");
Fsp.DownloadFile(Path.Concat(dirOnServer, fileOnServerData.Key), 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) if (delete_excess)

View File

@ -23,8 +23,9 @@
<PackageReference Include="Costura.Fody" Version="5.7.0"> <PackageReference Include="Costura.Fody" Version="5.7.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
</PackageReference> </PackageReference>
<PackageReference Include="DTLib.Dtsod" Version="1.3.3" /> <PackageReference Include="DTLib.Dtsod" Version="1.3.4" />
<PackageReference Include="DTLib.Logging" Version="1.3.3" /> <PackageReference Include="DTLib.Logging" Version="1.3.4" />
<PackageReference Include="DTLib.Network" Version="1.4.1" /> <PackageReference Include="DTLib.Network" Version="1.4.2" />
<PackageReference Include="DTLib.XXHash" Version="1.0.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,8 +1,5 @@
using System.Linq; using System.Linq;
using System.Text; using DTLib.XXHash;
using DTLib;
using DTLib.Extensions;
using DTLib.Filesystem;
using static launcher_server.Server; using static launcher_server.Server;
namespace launcher_server; namespace launcher_server;
@ -20,7 +17,6 @@ public static class Manifests
} }
StringBuilder manifestBuilder = new(); StringBuilder manifestBuilder = new();
Hasher hasher = new();
var manifestPath = Path.Concat(dir, "manifest.dtsod"); var manifestPath = Path.Concat(dir, "manifest.dtsod");
if (Directory.GetFiles(dir).Contains(manifestPath)) if (Directory.GetFiles(dir).Contains(manifestPath))
File.Delete(manifestPath); File.Delete(manifestPath);
@ -29,8 +25,11 @@ public static class Manifests
var fileRelative = fileInDir.RemoveBase(dir); var fileRelative = fileInDir.RemoveBase(dir);
manifestBuilder.Append(fileRelative); manifestBuilder.Append(fileRelative);
manifestBuilder.Append(": \""); manifestBuilder.Append(": \"");
byte[] hash = hasher.HashFile(Path.Concat(fileInDir)); var fileStream = File.OpenRead(fileInDir);
manifestBuilder.Append(hash.HashToString()); ulong hash = xxHash64.ComputeHash(fileStream);
fileStream.Close();
string hashStr = BitConverter.GetBytes(hash).HashToString();
manifestBuilder.Append(hashStr);
manifestBuilder.Append("\";\n"); manifestBuilder.Append("\";\n");
} }
File.WriteAllText(manifestPath, manifestBuilder.ToString().Replace('\\','/')); File.WriteAllText(manifestPath, manifestBuilder.ToString().Replace('\\','/'));
@ -59,7 +58,7 @@ public static class Manifests
} }
dirlist_content_builder dirlist_content_builder
.Append("\t\"") .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"); .Append("\"\n");
dirlist_content_builder.Append("];"); dirlist_content_builder.Append("];");

View File

@ -12,8 +12,9 @@
<InvariantGlobalization>true</InvariantGlobalization> <InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DTLib.Dtsod" Version="1.3.3" /> <PackageReference Include="DTLib.Dtsod" Version="1.3.4" />
<PackageReference Include="DTLib.Logging" Version="1.3.3" /> <PackageReference Include="DTLib.Logging" Version="1.3.4" />
<PackageReference Include="DTLib.Network" Version="1.4.1" /> <PackageReference Include="DTLib.Network" Version="1.4.2" />
<PackageReference Include="DTLib.XXHash" Version="1.0.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>