fsp change

This commit is contained in:
Timerix22 2024-01-07 14:44:44 +06:00
parent ea03818fe4
commit 5297231205
2 changed files with 13 additions and 5 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<!--package info--> <!--package info-->
<PackageId>DTLib.Network</PackageId> <PackageId>DTLib.Network</PackageId>
<Version>1.4.0</Version> <Version>1.4.1</Version>
<Authors>Timerix</Authors> <Authors>Timerix</Authors>
<Description>Some sick network protocols</Description> <Description>Some sick network protocols</Description>
<RepositoryType>GIT</RepositoryType> <RepositoryType>GIT</RepositoryType>

View File

@ -58,15 +58,20 @@ public class FSP
return fileStream.ToArray(); return fileStream.ToArray();
} }
private static readonly byte[] fspHeaderStrBytes = "FSP_file_size:".ToBytes();
public void DownloadToStream(System.IO.Stream fileStream) public void DownloadToStream(System.IO.Stream fileStream)
{ {
lock (MainSocket) lock (MainSocket)
{ {
BytesDownloaded = 0; BytesDownloaded = 0;
Filesize = BitConverter.ToInt64(MainSocket.GetPackage(), 0); var fspHeader = MainSocket.GetPackage();
if (!fspHeader.StartsWith(fspHeaderStrBytes))
throw new Exception(
$"invalid fsp header: '{fspHeader.BytesToString()}' " +
$"({fspHeader.MergeToString(',')})");
Filesize = BitConverter.ToInt64(fspHeader, fspHeaderStrBytes.Length);
if (Filesize < 0) if (Filesize < 0)
throw new Exception("FileSize < 0"); throw new Exception("FileSize < 0");
MainSocket.SendPackage("ready");
while (BytesDownloaded < Filesize) while (BytesDownloaded < Filesize)
{ {
@ -89,8 +94,11 @@ public class FSP
Filesize = fileStream.Length; Filesize = fileStream.Length;
lock (MainSocket) lock (MainSocket)
{ {
MainSocket.SendPackage(BitConverter.GetBytes(Filesize)); byte[] filesizeBytes = BitConverter.GetBytes(Filesize);
MainSocket.GetAnswer("ready"); byte[] fspHeader = new byte[fspHeaderStrBytes.Length + filesizeBytes.Length];
fspHeaderStrBytes.CopyTo(fspHeader, 0);
filesizeBytes.CopyTo(fspHeader, fspHeaderStrBytes.Length);
MainSocket.SendPackage(fspHeader);
while (BytesUploaded < Filesize) while (BytesUploaded < Filesize)
{ {