some optimization has done

This commit is contained in:
Timerix 2021-09-14 18:55:08 +03:00
parent 40b264a1df
commit 21e7e75584

View File

@ -1,6 +1,5 @@
using DTLib.Dtsod; using DTLib.Dtsod;
using DTLib.Filesystem; using DTLib.Filesystem;
using System.Collections.Generic;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text; using System.Text;
using static DTLib.PublicLog; using static DTLib.PublicLog;
@ -36,27 +35,46 @@ namespace DTLib.Network
public void DownloadFile(string filePath_client) public void DownloadFile(string filePath_client)
{ {
BytesDownloaded = 0; BytesDownloaded = 0;
using var fileStream = File.OpenWrite(filePath_client); using System.IO.Stream fileStream = File.OpenWrite(filePath_client);
Download_SharedCode(fileStream, true);
fileStream.Close();
Debug(new string[] { "g", $" downloaded {BytesDownloaded} of {Filesize} bytes\n" });
}
public byte[] DownloadFileToMemory(string filePath_server)
{
Debug("b", $"requesting file download: {filePath_server}\n");
mainSocket.SendPackage("requesting file download".ToBytes());
mainSocket.SendPackage(filePath_server.ToBytes());
return DownloadFileToMemory();
}
public byte[] DownloadFileToMemory()
{
BytesDownloaded = 0;
using var fileStream = new System.IO.MemoryStream();
Download_SharedCode(fileStream,false);
byte[] output = fileStream.GetBuffer();
fileStream.Close();
Debug(new string[] { "g", $" downloaded {BytesDownloaded} of {Filesize} bytes\n" });
return output;
}
void Download_SharedCode(System.IO.Stream fileStream, bool requiresFlushing)
{
Filesize = mainSocket.GetPackage().ToStr().ToUInt(); Filesize = mainSocket.GetPackage().ToStr().ToUInt();
var hashstr = mainSocket.GetPackage().HashToString();
mainSocket.SendPackage("ready".ToBytes()); mainSocket.SendPackage("ready".ToBytes());
int packagesCount = 0; int packagesCount = 0;
byte[] buffer = new byte[5120]; byte[] buffer = new byte[5120];
int fullPackagesCount = SimpleConverter.Truncate(Filesize / buffer.Length); int fullPackagesCount = SimpleConverter.Truncate(Filesize / buffer.Length);
// рассчёт скорости // получение полных пакетов файла
/*int seconds = 0;
var speedCounter = new Timer(true, 1000, () =>
{
seconds++;
PackageRecieved(BytesDownloaded);
});*/
// получение файла
for (byte n = 0; packagesCount < fullPackagesCount; packagesCount++) for (byte n = 0; packagesCount < fullPackagesCount; packagesCount++)
{ {
buffer = mainSocket.GetPackage(); buffer = mainSocket.GetPackage();
BytesDownloaded += (uint)buffer.Length; BytesDownloaded += (uint)buffer.Length;
fileStream.Write(buffer, 0, buffer.Length); fileStream.Write(buffer, 0, buffer.Length);
if (requiresFlushing)
{
if (n == 100) if (n == 100)
{ {
fileStream.Flush(); fileStream.Flush();
@ -64,46 +82,6 @@ namespace DTLib.Network
} }
else n++; else n++;
} }
// получение остатка
if ((Filesize - fileStream.Position) > 0)
{
mainSocket.SendPackage("remain request".ToBytes());
buffer = mainSocket.GetPackage();
BytesDownloaded += (uint)buffer.Length;
fileStream.Write(buffer, 0, buffer.Length);
}
//speedCounter.Stop();
fileStream.Flush();
fileStream.Close();
Debug(new string[] { "g", $" downloaded {BytesDownloaded} of {Filesize} bytes\n" });
}
public byte[] DownloadFileToMemory(string filePath_server)
{
BytesDownloaded = 0;
Debug("b", $"requesting file download: {filePath_server}\n");
mainSocket.SendPackage("requesting file download".ToBytes());
mainSocket.SendPackage(filePath_server.ToBytes());
using var fileStream = new System.IO.MemoryStream();
Filesize = mainSocket.GetPackage().ToStr().ToUInt();
var hashstr = mainSocket.GetPackage().HashToString();
mainSocket.SendPackage("ready".ToBytes());
int packagesCount = 0;
byte[] buffer = new byte[5120];
int fullPackagesCount = SimpleConverter.Truncate(Filesize / buffer.Length);
// рассчёт скорости
/*int seconds = 0;
var speedCounter = new Timer(true, 1000, () =>
{
seconds++;
PackageRecieved(BytesDownloaded);
});*/
// получение файла
for (; packagesCount < fullPackagesCount; packagesCount++)
{
buffer = mainSocket.GetPackage();
BytesDownloaded += (uint)buffer.Length;
fileStream.Write(buffer, 0, buffer.Length);
} }
// получение остатка // получение остатка
if ((Filesize - fileStream.Position) > 0) if ((Filesize - fileStream.Position) > 0)
@ -113,42 +91,32 @@ namespace DTLib.Network
BytesDownloaded += (uint)buffer.Length; BytesDownloaded += (uint)buffer.Length;
fileStream.Write(buffer, 0, buffer.Length); fileStream.Write(buffer, 0, buffer.Length);
} }
//speedCounter.Stop(); if (requiresFlushing) fileStream.Flush();
byte[] output = fileStream.GetBuffer();
fileStream.Close();
Debug(new string[] { "g", $" downloaded {BytesDownloaded} of {Filesize} bytes\n" });
return output;
} }
// отдаёт файл с помощью FSP протокола // отдаёт файл с помощью FSP протокола
public void UploadFile(string filePath) public void UploadFile(string filePath)
{ {
Debug("b", $"uploading file {filePath}\n"); Debug("b", $"uploading file {filePath}\n");
Debug("m", "0\n");
using var fileStream = File.OpenRead(filePath); using var fileStream = File.OpenRead(filePath);
Filesize = File.GetSize(filePath).ToUInt(); Filesize = File.GetSize(filePath).ToUInt();
var fileHash = new Hasher().HashFile(filePath); Debug("m", "1\n");
mainSocket.SendPackage(Filesize.ToString().ToBytes()); mainSocket.SendPackage(Filesize.ToString().ToBytes());
mainSocket.SendPackage(fileHash); Debug("m", "2\n");
mainSocket.GetAnswer("ready"); mainSocket.GetAnswer("ready");
Debug("m", "3\n");
byte[] buffer = new byte[5120]; byte[] buffer = new byte[5120];
var hashstr = fileHash.HashToString();
int packagesCount = 0; int packagesCount = 0;
int fullPackagesCount = SimpleConverter.Truncate(Filesize / buffer.Length); int fullPackagesCount = SimpleConverter.Truncate(Filesize / buffer.Length);
// рассчёт скорости // отправка полных пакетов файла
/*int seconds = 0;
var speedCounter = new Timer(true, 1000, () =>
{
seconds++;
PackageSent(BytesUploaded);
});*/
// отправка файла
for (; packagesCount < fullPackagesCount; packagesCount++) for (; packagesCount < fullPackagesCount; packagesCount++)
{ {
fileStream.Read(buffer, 0, buffer.Length); fileStream.Read(buffer, 0, buffer.Length);
mainSocket.SendPackage(buffer); mainSocket.SendPackage(buffer);
BytesUploaded += (uint)buffer.Length; BytesUploaded += (uint)buffer.Length;
} }
// досылка остатка // отправка остатка
if ((Filesize - fileStream.Position) > 0) if ((Filesize - fileStream.Position) > 0)
{ {
mainSocket.GetAnswer("remain request"); mainSocket.GetAnswer("remain request");
@ -157,7 +125,6 @@ namespace DTLib.Network
mainSocket.SendPackage(buffer); mainSocket.SendPackage(buffer);
BytesUploaded += (uint)buffer.Length; BytesUploaded += (uint)buffer.Length;
} }
//speedCounter.Stop();
fileStream.Close(); fileStream.Close();
Debug(new string[] { "g", $" uploaded {BytesUploaded} of {Filesize} bytes\n" }); Debug(new string[] { "g", $" uploaded {BytesUploaded} of {Filesize} bytes\n" });
} }