adjust to send only one packet for all changes at once

This commit is contained in:
Stanley Dimant
2022-07-24 14:34:26 +02:00
parent 0eb2ed639d
commit f39c085fbf
10 changed files with 300 additions and 286 deletions

View File

@@ -17,13 +17,12 @@ namespace MareSynchronos.WebAPI
public partial class ApiController
{
private int _downloadId = 0;
public void CancelUpload(ObjectKind objectKind)
public void CancelUpload()
{
_uploadTokens.TryGetValue(objectKind, out var cts);
if (cts != null)
if (_uploadToken != null)
{
Logger.Warn("Cancelling upload");
cts?.Cancel();
Logger.Debug("Cancelling upload");
_uploadToken?.Cancel();
_mareHub!.SendAsync(Api.SendFileAbortUpload);
CurrentUploads.Clear();
}
@@ -41,7 +40,6 @@ namespace MareSynchronos.WebAPI
await using var fs = File.OpenWrite(fileName);
await foreach (var data in reader.WithCancellation(ct))
{
//Logger.Debug("Getting chunk of " + hash);
CurrentDownloads[downloadId].Single(f => f.Hash == hash).Transferred += data.Length;
await fs.WriteAsync(data, ct);
}
@@ -124,12 +122,12 @@ namespace MareSynchronos.WebAPI
if (!IsConnected || SecretKey == "-") return;
Logger.Debug("Sending Character data to service " + ApiUri);
CancelUpload(character.ObjectKind);
_uploadTokens[character.ObjectKind] = new CancellationTokenSource();
var uploadToken = _uploadTokens[character.ObjectKind]!.Token;
CancelUpload();
_uploadToken = new CancellationTokenSource();
var uploadToken = _uploadToken.Token;
Logger.Verbose("New Token Created");
var filesToUpload = await _mareHub!.InvokeAsync<List<UploadFileDto>>(Api.InvokeFileSendFiles, character.FileReplacements.Select(c => c.Hash).Distinct(), uploadToken);
var filesToUpload = await _mareHub!.InvokeAsync<List<UploadFileDto>>(Api.InvokeFileSendFiles, character.FileReplacements.SelectMany(c => c.Value.Select(v => v.Hash)).Distinct(), uploadToken);
foreach (var file in filesToUpload.Where(f => !f.IsForbidden))
{
@@ -205,8 +203,8 @@ namespace MareSynchronos.WebAPI
Logger.Warn("=== Upload operation was cancelled ===");
}
Logger.Verbose("Upload complete for " + character.Hash);
_uploadTokens.Remove(character.ObjectKind);
Logger.Verbose("Upload complete for " + character.GetHashCode());
_uploadToken = null;
}
private async Task<(string, byte[])> GetCompressedFileData(string fileHash, CancellationToken uploadToken)

View File

@@ -37,7 +37,7 @@ namespace MareSynchronos.WebAPI
private HubConnection? _mareHub;
private Dictionary<ObjectKind, CancellationTokenSource?> _uploadTokens = new();
private CancellationTokenSource? _uploadToken = new();
private ConnectionDto? _connectionDto;
public SystemInfoDto SystemInfoDto { get; private set; } = new();
@@ -268,10 +268,7 @@ namespace MareSynchronos.WebAPI
{
CurrentUploads.Clear();
CurrentDownloads.Clear();
foreach(var token in _uploadTokens.Values)
{
token?.Cancel();
}
_uploadToken?.Cancel();
Logger.Debug("Connection closed");
Disconnected?.Invoke();
return Task.CompletedTask;
@@ -289,10 +286,7 @@ namespace MareSynchronos.WebAPI
{
CurrentUploads.Clear();
CurrentDownloads.Clear();
foreach (var token in _uploadTokens.Values)
{
token?.Cancel();
}
_uploadToken?.Cancel();
Logger.Debug("Connection closed... Reconnecting");
Disconnected?.Invoke();
return Task.CompletedTask;