added DTLib.XXHash
This commit is contained in:
parent
b8ba4adfb3
commit
e1f851384a
@ -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)
|
||||||
|
|||||||
@ -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>
|
||||||
@ -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("];");
|
||||||
|
|||||||
@ -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>
|
||||||
Loading…
Reference in New Issue
Block a user